小程序之实现列表切换与滚动加载

简介:

先看效果图:

基于touchUI WX开发,片段来自码云 wallpaper 项目 

贴上代码:

<template>
<view class="collect">
  <view class="title-wire"></view>
  <!-- 横屏竖屏 -->
  <scroll-view class="recommend" scroll-y='true' style="height:{{height}}px" bindscrolltolower='lower'>
    <view style="height:50px"></view>
    <ui-fixed-view top="0" left="0" right="0">
      <view class="fixed-view-content">
        <view style="width:160px;margin:0 auto">
          <ui-tabs width="" 
            tab-style="{{tabStyle}}" 
            auto-width="{{false}}" 
            index="{{ current4 }}" 
            active-tab-style="{{activeTabStyle4}}" 
            bindchange="handleChange4"
            probe="1"
            class="index-recommend">
            <ui-tab>
              <view class="item item-right">横屏壁纸</view>
            </ui-tab>
            <ui-tab>
              <view class="item item-left">
                竖屏壁纸
              </view>
            </ui-tab>
          </ui-tabs>
        </view>
      </view>
    </ui-fixed-view>
    <view class="classify-cont">
      <!-- 横屏壁纸 -->
      <view class="classify-list classify-list-across"
        wx:if="{{current4 === 0}}"
        wx:for="{{getAllList}}"
        wx:key="index">
        <view class="classify-list-cont"
          data-id="{{index}}"
          data-url="{{item.imageUrl}}" 
          data-text="横屏壁纸详情" 
          bindtap="toDetails"
        >
          <image src="{{item.imageUrl}}" mode="aspectFill"/>
        </view>
      </view>
      <!-- 竖屏壁纸 -->
      <view class="classify-list classify-list-vertical"
        wx:if="{{current4 === 1}}"
        wx:for="{{getAllList}}"
        wx:key="index">
        <view class="classify-list-cont"
          data-id="{{index}}"
          data-url="{{item.imageUrl}}" 
          data-text="竖屏壁纸详情" 
          bindtap="toDetails"
        >
          <image src="{{item.imageUrl}}" mode="aspectFill"/>
        </view>
      </view>
      <view class="all-nothave" wx:if="{{isGetAllList}}">没有更多了</view>
    </view>
  </scroll-view>
</view>
</template>

<script>
export default {
  config: {
    navigationBarTitleText: '我的收藏'
  },
  data: {
    // 横屏竖屏切换
    current4: 0,
    tabStyle:{
      'flex':'0 0 40px',
      'padding':'10px 0px',
      'width':'40px',
      'margin': '0 20px',
    },
    activeTabStyle4:{
      "border-bottom": "2px solid #ff6630",
    },
    tabContents: [
      {subCategoryList: [
        {
            text: '1',
            imageUrl: "http://ipyd.paixian.com/wall/banner1.png",
        }, {
            text: '2',
            imageUrl: "http://ipyd.paixian.com/wall/banner2.png",
        }, {
            text: '3',
            imageUrl: "http://ipyd.paixian.com/wall/banner3.png",
        }
      ]}, 
      {subCategoryList: [
        {
            text: '1',
            imageUrl: "http://ipyd.paixian.com/wall/list/1.jpg",
        }, {
            text: '2',
            imageUrl: "http://ipyd.paixian.com/wall/list/2.jpg",
        }, {
            text: '3',
            imageUrl: "http://ipyd.paixian.com/wall/list/3.jpg",
        }, {
            text: '4',
            imageUrl: "http://ipyd.paixian.com/wall/list/4.jpg",
        }, {
            text: '5',
            imageUrl: "http://ipyd.paixian.com/wall/list/5.jpg",
        }, {
            text: '6',
            imageUrl: "http://ipyd.paixian.com/wall/list/6.jpg",
        }, {
            text: '7',
            imageUrl: "http://ipyd.paixian.com/wall/list/7.jpg",
        }, {
            text: '8',
            imageUrl: "http://ipyd.paixian.com/wall/list/8.jpg",
        }, {
            text: '9',
            imageUrl: "http://ipyd.paixian.com/wall/list/9.jpg",
        }, {
            text: '10',
            imageUrl: "http://ipyd.paixian.com/wall/list/10.jpg",
        }, {
            text: '11',
            imageUrl: "http://ipyd.paixian.com/wall/list/11.jpg",
        }, {
            text: '12',
            imageUrl: "http://ipyd.paixian.com/wall/list/12.jpg",
        }, {
            text: '13',
            imageUrl: "http://ipyd.paixian.com/wall/list/13.jpg",
        }, {
            text: '14',
            imageUrl: "http://ipyd.paixian.com/wall/list/14.jpg",
        }, {
            text: '15',
            imageUrl: "http://ipyd.paixian.com/wall/list/15.jpg",
        }, {
            text: '16',
            imageUrl: "http://ipyd.paixian.com/wall/list/16.jpg",
        }
      ]},
    ], // 横屏竖屏切换
    tabContentData: [], // 横屏竖屏后的列表
    // 滚动加载列表
    height: '',
    getAllList: [], // 模拟数据滚动加载,
    pageSize: 15, // 每页条数
    pageNo: 1, // 当前页数
    isGetAllList: false, // 是否显示没有更多了
  },
  //横屏竖屏切换
  handleChange4 (e) {
    let index = e.detail.index
    this.setData({
      current4:index,
      tabContentData:this.data.tabContents[index].subCategoryList
    })
    console.log(this.data.tabContentData)
    this.getAllList()
  },
  // 横屏竖屏切换后加载第一屏数据
  getAllList () {
    let _this = this
    _this.data.getAllList = [] // 切换后清除原有存储数据
    _this.data.isGetAllList = false
    wx.getSystemInfo({
      success: (res) => {
        let result = _this.data.tabContentData;
        for (let i = 0; i < _this.data.pageSize; i++) {
          if(_this.data.getAllList.length < _this.data.tabContentData.length){
            _this.data.getAllList.push(result[i])
          }
        }
        _this.setData({
          height: res.windowHeight,
          getAllList: _this.data.getAllList
        })
        // 判断展示没有更多了
        console.log(_this.data.getAllList.length,_this.data.tabContentData.length)
        if(_this.data.getAllList.length >= _this.data.tabContentData.length) {
          _this.setData({
            isGetAllList: true
          })
          return false
        } else {
          _this.setData({
            isGetAllList: false
          })
        }
      }
    })
  },
  onReady:function(){
  },
  // 因为是模拟数据返回的是全部,这里所以要做成分页的形式,如果是通过页数去请求接口再push就不需要这样子操作了
  lower() {
    if(this.data.getAllList.length < this.data.tabContentData.length){
      wx.showLoading({  
        title: '加载中',
        icon: 'loading',
      })
    } else {
      this.setData({
        isGetAllList: true
      })
    }
    for (let i = 0; i < this.data.pageSize; i++) {
      let getAllListLength = this.data.getAllList.length
      if(this.data.getAllList.length < this.data.tabContentData.length){
        this.data.getAllList.push(this.data.tabContentData[getAllListLength++]);
      }
    }
    setTimeout(() => {
      this.setData({
        getAllList: this.data.getAllList
      });
      wx.hideLoading();
    }, 500)
  },
  //生命周期函数--监听页面加载
  onLoad: function (options) {
    this.setData({
      current4: 0,
      tabContentData:this.data.tabContents[0].subCategoryList
    })
    this.getAllList()    
  },
  // 跳转到壁纸详情
  toDetails(e) {
    console.log(e.currentTarget.dataset)
    wx.navigateTo({
      url:
        "/pages/collectDetails/collectDetails?text="+ e.currentTarget.dataset.text +"&url=" + e.currentTarget.dataset.url, // 跳转页面的路径,可带参数 ?隔开,不同参数用 & 分隔;相对路径,不需要.wxml后缀
      success: function() {}, // 成功后的回调;
      fail: function() {}, // 失败后的回调;
      complete: function() {} // 结束后的回调(成功,失败都会执行)
    })
  },
}
</script>

<style lang="less">
.collect{
  .fixed-view-content {
    background-color: #fff;
    z-index: 99;
  }
  // 横屏竖屏切换
  .recommend{
    width: 100%;
    background: #fff;
    .classify-cont {
      display: flex;
      flex-wrap: wrap;
      justify-content: left;
      margin-top: -4px;
      padding-left: 15px;
      .classify-list {
        padding: 15px 15px 0px 0px;        
        .classify-list-cont {
          border-radius: 4px;
          overflow: hidden;
          box-shadow: 0px 2px 4px 0px rgba(215,215,215,0.5);
          img{
            width: 100%;
            height: auto;
          }
        }
      }
      .classify-list-across{
        width: 50%;
        .classify-list-cont{
          height: 100px;
        }
      }
      .classify-list-vertical{
        width: 33.3%;
        .classify-list-cont {
          height: 150px;
        }
      }
    }
  }
  .all-nothave{
    width: 100%;
    text-align: center;
    color:#7c7c7c;
    padding: 20px 0;
  }
}
</style>
相关文章
|
6月前
|
小程序 UED 开发者
小程序如何监听页面的滚动事件
小程序如何监听页面的滚动事件
223 0
|
6月前
|
小程序 开发工具 数据库
零基础开发小程序第三课-列表功能开发
零基础开发小程序第三课-列表功能开发
|
6月前
|
移动开发 小程序 JavaScript
【小程序质量提优解决方案】(二)内嵌H5加载异常(404)
【小程序质量提优解决方案】(二)内嵌H5加载异常(404)
113 0
|
6月前
|
小程序 JavaScript 前端开发
微信小程序利用key实现列表性能的提升
微信小程序利用key实现列表性能的提升
|
4月前
|
小程序 API 数据库
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
85 0
|
1月前
|
缓存 小程序 UED
如何利用小程序的生命周期函数实现数据的加载和更新?
如何利用小程序的生命周期函数实现数据的加载和更新?
64 4
|
2月前
|
小程序 前端开发 索引
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
这篇文章介绍了微信小程序中条件渲染和列表渲染的使用方法,包括wx:if、wx:elif、wx:else、wx:for、wx:key以及block标记和hidden属性的使用。
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
|
3月前
|
监控 小程序 数据处理
揭秘支付宝小程序性能优化秘籍:从加载到运行,每一步都快人一步!
【8月更文挑战第27天】本文深入探讨了支付宝小程序性能优化的关键技术和策略,包括减少网络请求、利用CDN加速、代码按需加载、图片压缩、懒加载以及性能监控等多方面内容,并提供了实用的示例代码,帮助开发者显著提升小程序的加载速度与运行效率,创造更佳用户体验。
81 1
|
4月前
|
小程序 开发者
【微信小程序】 微信小程序报错不在以下request合法域名列表中
【微信小程序】 微信小程序报错不在以下request合法域名列表中
931 0
|
4月前
|
小程序 前端开发
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
【微信小程序-原生开发】实用教程22 - 绘制图表(引入 echarts,含图表的懒加载-获取到数据后再渲染图表,多图表加载等技巧)
252 0