zoukankan      html  css  js  c++  java
  • 微信小程序 仿‘得到app’分类列表页

    今天另起一篇,贴出完整的代码,大概思路是左侧大分类列表,点击后联动右侧二级分类,及下面文章列表,点击二级分类也联动下面文章列表。

    代码如下:

    <view class="page">
      <view class="flex-row">
        <!--左侧栏-->
        <view class="nav_left" >
          <block wx:for="{{leftList}}" wx:key="unique" class="left_area">
          <!--当前项的id等于item项的id,那个就是当前状态-->
          <!--用data-index记录这个数据在数组的下标位置,使用data-id设置每个item的id值,供打开2级页面使用-->
            <view class="nav_left_items {{curNav == item.paperColumnId ? 'active' : ''}}" bindtap="onLeftTab" data-index="{{index}}" data-id="{{item.paperColumnId}}">{{item.columnName}}</view>
          </block>
        </view> 
        <!--右侧栏-->
        <view class="nav_right">
          <scroll-view scroll-x="true" class="nav_right_top">
            <block wx:for="{{rightTopList}}" wx:key="unique" >
              <view class="right_top_items {{rightNav == item.paperColumnId ? 'active' : ''}}" data-index="{{index}}" data-id="{{item.paperColumnId}}" bindtap="onRightTab">
                <text>{{item.columnName}}</text>
              </view>
             </block>
          </scroll-view>     
    
          <view class="totalCount">共{{totalCount}}个内容</view>
          <scroll-view scroll-y="true" class="nav_right_list" bindscrolltolower='scrollLower'>
            <block wx:for="{{rightArticles}}" wx:key="unique" >
              <view class="nav_right_items" data-id="{{item.paperPatternsId}}" bindtap="onDetails">
                <text>{{item.patternsTitle}}</text>
              </view>
            </block>
            <view class="flex-center" hidden="{{nodata}}">该分类暂无数据</view>
          </scroll-view>
    
        </view>
      </view>
    </view>

    样式:

    .nav_left {
        overflow-y: auto;
        width: 25%;
        height: 100vh;
        background: #f5f5f5;
    }
    
    .nav_left .left_area {
        height: 100%;
    }
    
    .nav_left .nav_left_items {
        padding: 20rpx;
        font-size: 28rpx;
    }
    
    .active {
        background: #fff;
        color: #12318b;
    }
    
    .nav_right {
        position: relative;
        width: 75%;
    }
    
    .nav_right .nav_right_top {
        position: fixed;
        top: 0;
        right: 0;
        z-index: 99;
        display: flex;
        padding-top: 20rpx;
        width: 75%;
        height: 80rpx;
        border-bottom: 1px solid #dedede;
        background: #fff;
        white-space: nowrap;
        font-size: 28rpx;
        flex-direction: row;
    }/*二级分类,固定不动*/
    
    .nav_right_top .right_top_items {
        display: inline-block;
        margin-left: 20rpx;
    }
    
    .nav_right_list {
        overflow-y: auto;
        margin-top: 140rpx;
        height: calc(100vh - 140rpx);
    }/*高度100vh - 上方140rpx*/
    
    .nav_right .nav_right_items {
        display: -webkit-box;
        overflow: hidden;
        padding: 15rpx 15rpx 16rpx;
        border-bottom: 1px solid #dedede;
        text-overflow: ellipsis;
        white-space: normal!important;
        word-wrap: break-word;
        line-height: 1.7;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }/*内容最多显示2行,超出显示...*/
    
    .nav_right .totalCount {
        position: fixed;
        top: 80rpx;
        right: 0;
        z-index: 99;
        padding-left: 15rpx;
        width: 75%;
        height: 60rpx;
        border-bottom: 1px solid #dedede;
        background: #fff;
        font-size: 28rpx;
        line-height: 60rpx;
    }/*二级分类下的内容数量,固定不动*/

    js:

    var api = require('../../api.js');
    var app = getApp();
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        leftList:[], //左侧栏目列表
        rightTop: [], //右侧二级栏目列表
        rightList:[], //右侧文章列表
        curNav: '3', //默认左侧第一个栏目id
        cid:'', //
        rightNav:'3', //默认右侧栏目id
        pageindex:1, //分页
        isFromSearch: true,  //用于判断articles数组是不是空数组,默认true,空的数组
        nodata: true
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        var that = this;
        this.leftList();
        this.rightTop(that.data.rightNav);
        this.loadArticles(that.data.rightNav);
        
      },
    
      //左侧栏目
      leftList: function () {
        var that = this;
        wx.request({
          url: api.wx.sswsColumn,
          data:app.getSign({
          }),
          success: (res) => {
            console.log(res);
            that.setData({
              leftList: res.data.data,
            })
          }
        })
      },
      //左侧栏目点击事件 
      onLeftTab: function (e) {
        console.log(e.target.dataset.id);
        // 获取item项的id,和数组的下标值  
        let curNav = e.target.dataset.id,
          index = parseInt(e.target.dataset.index);
        // 把点击到的某一项,设为当前index  
        this.setData({
          curNav: curNav,
          cid: curNav,
          rightNav: curNav,
          pageindex: 1, //每点击分类分页归1
          isFromSearch: true, //每点击分类数组置为空
        })
        console.log('curNav',curNav);
        this.rightTop(curNav);
        this.loadArticles(curNav);
      },
    
      //右侧顶部栏目
      rightTop:function(cid){
        var that = this;
        wx.request({
          url: api.wx.sswsColumn,
          data: app.getSign({
            cid: that.data.rightNav,
          }),
          success: (res) => {
            console.log(res);
            var rightTop = res.data.data;
            var obj = {
              paperColumnId: that.data.curNav,
              columnName: "全部"
            };
            //后台数据没有全部,所以在每个二级分类的数组前插入'全部',id是父级分类的id
            rightTop.unshift(obj);
            that.setData({
              rightTopList: rightTop
            })
            //console.log('11',that.data.rightTopList);
          }
        })  
      },
      //右侧栏目点击事件
      onRightTab:function(e){
        console.log(e.currentTarget.dataset.id);
        let rightNav = e.currentTarget.dataset.id,
          index = parseInt(e.currentTarget.dataset.index);
        this.setData({
          rightNav: rightNav,
          pageindex: 1, //每点击分类分页归1
          isFromSearch: true, //每点击分类数组置为空
        })
        this.loadArticles(rightNav);
      },
    
      //右侧列表
      loadArticles:function(cid,pageindex){
        var that = this;
        var pageindex = that.data.pageindex; 
        wx.request({
          url: api.wx.sswsList,
          data: app.getSign({
            cid: that.data.rightNav,
            page: pageindex,
            limit:'15',  //显示条数,可更改
          }),
          success: (res) => {
            console.log('la',res);
            if(res.data.data != 0){
          var rightList = res.data.data.data; that.data.isFromSearch ? rightList = res.data.data.data : rightList = that.data.rightArticles.concat(res.data.data.data) that.setData({ totalCount: res.data.data.totalCount, rightArticles: rightList, });
         }else{    
              that.setData({
           nodata:false,
            })
           }
          }
        })  
      },
      //加载更多
      scrollLower:function(){
        let that = this;
        console.log("before" + that.data.pageindex);
        if (that.data.pageindex <= 20) {
          that.setData({
            pageindex: that.data.pageindex + 1,  //每次触发上拉事件,把pageindex+1
            isFromSearch: false  //触发到上拉事件,把isFromSearch设为为false
          });
          console.log("after" + that.data.pageindex);
    
          that.loadArticles();
    
        } else {
          wx.showToast({
            title: '没有更多数据',
          })
          this.setData({
            searchLoading: false,
          })
        }
      },
      
      //详情页
      onDetails:function(e){
        console.log(e.currentTarget.dataset.id);
        wx.navigateTo({
          url: "../sswsDetail/sswsDetail?paperPatternsId=" + e.currentTarget.dataset.id
        })
      },
    
      
    })    
  • 相关阅读:
    sql执行的顺序
    $(obj).index(this) 与 $(this).index()的区别
    java取得百分比
    取得input的特殊值
    清除select的边框和三角形
    在jsp页面中获取列表长度
    mysql mybatis 批量更新和新增
    oracle mybatis 批量更新和新增
    jstl if else 判断
    判断radio,select,checkbox是否选中的方法
  • 原文地址:https://www.cnblogs.com/joe235/p/11464841.html
Copyright © 2011-2022 走看看