欢迎来到懒人模板!我们专注移动互联网,所有模板永久免费下载!
  • 首 页
  • 当前位置:主页 > 小程序教程 >

    微信小程序开发分类页面栅格布局制作与设计

    2018-05-15 09:26 来源/作者:懒人模板 分类:小程序教程  « »
    微信小程序商城电商整套系列相关推荐:
    1、微信小程序开发页面顶部导航栏制作设计 [图]
    2、
    微信小程序开发底部导航菜单栏的制作设计 [图]
    3、微信小程序开发广告轮播幻灯图制作设计 [图]
    4、微信小程序开发商城电商首页整体布局制作设计 [图]
    5、微信小程序开发分类页面栅格布局制作与设计 [图]
    6、微信小程序开发商品详情页中sku的弹出属性筛选选择框 [图]
    7、微信小程序商品正文详情页整体布局制作与设计 [图]
    8、微信小程序商城电商购物车页面制作与设计 [图]
    9、微信小程序商城电商个人会员中心页面制作设计 [图]

    今天主要商城电商类网站产品分类界面布局,今天布局左边是一级目录,右边是一级目录对应的二级目录,根据这个需求,我们数据设计的结构一定是数组嵌套数组,第一个数组包含一级目录数据,嵌套的数组包含的是二级目录的数据。做好以后可以达到效果如下:
     
    1、样式文件代码如下:
    page{  
      background: #f5f5f5;  
    }  
    /*总体主盒子*/  
    .container {  
      position: relative;  
      width: 100%;  
      height: 100%;  
      background-color: #fff;  
      color: #939393;  
    }
     /*左侧栏主盒子*/  
    .nav_left{  
      /*设置行内块级元素(没使用定位)*/  
      display: inline-block;  
      width: 25%;  
      height: 100%;  
      /*主盒子设置背景色为灰色*/  
      background: #f5f5f5;  
      text-align: center;  
    }  
    /*左侧栏list的item*/  
    .nav_left .nav_left_items{  
      /*每个高30px*/  
      height: 40px;  
      /*垂直居中*/  
      line-height: 40px;  
      /*再设上下padding增加高度,总高42px*/  
      padding: 6px 0;  
      /*只设下边线*/  
      border-bottom: 1px solid #dedede;  
      /*文字14px*/  
      font-size: 14px; 
    }  
    /*左侧栏list的item被选中时*/  
    .nav_left .nav_left_items.active{  
      /*背景色变成白色*/  
      background: #fff;  
      color: #f0145a; 
    }  
    /*右侧栏主盒子*/  
    .nav_right{  
      /*右侧盒子使用了绝对定位*/  
      position: absolute;  
      top: 0;  
      right: 0;  
      flex: 1;  
      /*宽度75%,高度占满,并使用百分比布局*/  
      width: 75%;  
      height: 1000px;  
      padding: 10px;  
      box-sizing: border-box;  
      background: #fff;  
    }  
    /*右侧栏list的item*/  
    .nav_right .nav_right_items{  
      /*浮动向左*/  
      float: left;  
      /*每个item设置宽度是33.33%*/  
      width: 33.33%;  
      height: 120px;  
      text-align: center;  
    }  
    .nav_right .nav_right_items image{  
      /*被图片设置宽高*/  
      width: 60px;  
      height: 60px;  
      margin-top: 15px;  
    }  
    .nav_right .nav_right_items text{  
      /*给text设成块级元素*/  
      display: block;  
      margin-top: 15px;  
      font-size: 14px;  
      color: black;
      /*设置文字溢出部分为...*/  
      overflow: hidden;  
      white-space: nowrap;  
      text-overflow: ellipsis;  
    } 
    .nodata_text
    {
      color: black;
      font-size: 14px;  
      text-align: center;  
    } 
    2、测试数据js文件代码如下:
    Page({
      data: {
        cateItems: [
          {
            cate_id: 1,
            cate_name: "护肤",
            ishaveChild: true,
            children:
            [
              {
                child_id: 1,
                name: '洁面皂',
                image: "http://www.lanrenmb.com/files/logo/20161208/148117972563.jpg"
              },
              {
                child_id: 2,
                name: '卸妆',
                image: "http://www.lanrenmb.com/files/logo/20161207/148110444480.jpg"
              },
              {
                child_id: 3,
                name: '洁面乳',
                image: "http://www.lanrenmb.com/files/logo/20161208/148117973270.jpg"
              },
              {
                child_id: 4,
                name: '面部祛角质',
                image: "http://www.lanrenmb.com/files/logo/20161208/148117981591.jpg"
              }
            ]
          },
          {
            cate_id: 2,
            cate_name: "彩妆",
            ishaveChild: true,
            children:
            [
              {
                child_id: 1,
                name: '气垫bb',
                image: "http://www.lanrenmb.com/files/logo/20161212/14815381301.jpg"
              },
              {
                child_id: 2,
                name: '修容/高光',
                image: "http://www.lanrenmb.com/files/logo/20161212/14815381411.jpg"
              },
              {
                child_id: 3,
                name: '遮瑕',
                image: "http://www.lanrenmb.com/files/logo/20161212/148153815181.jpg"
              },
              {
                child_id: 4,
                name: '腮红',
                image: "http://www.lanrenmb.com/files/logo/20161212/148153815759.jpg"
              },
              {
                child_id: 5,
                name: '粉饼',
                image: "http://www.lanrenmb.com/files/logo/20161212/148153816983.jpg"
              },
              {
                child_id: 6,
                name: '粉底',
                image: "http://www.lanrenmb.com/files/logo/20161212/148153817721.jpg"
              },
              {
                child_id: 7,
                name: '蜜粉/散粉',
                image: "http://www.lanrenmb.com/files/logo/20161212/148153819354.jpg"
              },
              {
                child_id: 8,
                name: '隔离霜',
                image: "http://www.lanrenmb.com/files/logo/20161215/148179053369.jpg"
              }
            ]
          },
          {
            cate_id: 3,
            cate_name: "香水/香氛",
            ishaveChild: true,
            children:
            [
              {
                child_id: 1,
                name: '淡香水EDT',
                image: "http://www.lanrenmb.com/files/logo/20161213/14815978910.jpg"
              },
              {
                child_id: 2,
                name: '浓香水EDP',
                image: "http://www.lanrenmb.com/files/logo/20161213/148159789883.jpg"
              },
              {
                child_id: 3,
                name: '香体走珠',
                image: "http://www.lanrenmb.com/files/logo/20161213/14815979307.jpg"
              },
              {
                child_id: 4,
                name: '古龙香水男士的最爱',
                image: "http://www.lanrenmb.com/files/logo/20161213/148159765589.jpg"
              }
            ]
          },
          {
            cate_id: 4,
            cate_name: "个人护理",
            ishaveChild: false,
            children: []
          }
        ],
        curNav: 1,
        curIndex: 0
      },
    
      //事件处理函数  
      switchRightTab: function (e) {
        // 获取item项的id,和数组的下标值  
        let id = e.target.dataset.id,
          index = parseInt(e.target.dataset.index);
        // 把点击到的某一项,设为当前index  
        this.setData({
          curNav: id,
          curIndex: index
        })
      }
    }) 
    以上js文件代码有点多。大家主要了解下面几个字段就可以了。

     

    cateItems 展示的数据
    curNav 控制当前那个按钮点亮
    curIndex 根据此参数来拿第几个分类的数据
    switchRightTab 分类tab事件的处理
     
    cateItems里的数据每一个对象都是一个品类的数据,拿第一个品类护肤来说,
     
    cate_id 识别的id
     
    cate_name 一级分类名称
    ishaveChild 判断是否有子集
    children 二级目录的数据

    3、分类页面代码如下:
    <!--主盒子-->
    <view class="container">
      <!--左侧栏-->
      <view class="nav_left">
        <block wx:for="{{cateItems}}">
          <!--当前项的id等于item项的id,那个就是当前状态-->
          <!--用data-index记录这个数据在数组的下标位置,使用data-id设置每个item的id值,供打开2级页面使用-->
          <view class="nav_left_items {{curNav == item.cate_id ? 'active' : ''}}" bindtap="switchRightTab" data-index="{{index}}" data-id="{{item.cate_id}}">{{item.cate_name}}</view>
        </block>
      </view>
      <!--右侧栏-->
      <view class="nav_right">
        <!--如果有数据,才遍历项-->
        <view wx:if="{{cateItems[curIndex].ishaveChild}}">
          <block wx:for="{{cateItems[curIndex].children}}">
            <view class="nav_right_items">
            <!--界面跳转 -->
              <navigator url="../../detail/detail}}">
                <image src="{{item.image}}"></image>
                <text>{{item.name}}</text>
              </navigator>
            </view>
          </block>
        </view>
        <!--如果无数据,则显示数据-->
        <view class="nodata_text" wx:else>该分类暂无数据</view>
      </view>
    </view>
    以上wxml页面有以下两点需要注意:
    一、nav_left_items {{curNav == item.cate_id ? ‘active’ : ”}} 在classify.js代码中已经说了curNav的作用,就是在这里实现的,根据是否和一级目录cate_id相同,来判断是否点亮文字。相同执行.nav_left_items.active样式,不相同则执行.nav_left_items样式
    二、wx:for 和wx: if的知识点 
    ① wx:for 微信小程序列表的渲染,我们之前做首页的时候就有接触过用于循环数组,展示列表型数据
     
    1、默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item
    <view wx:for="{{items}}">
      {{index}}: {{item.message}}
    </view>
    2、也可以自定义变量表使用 wx:for-item可以指定数组当前元素的变量名 使用wx:for-index可以指定数组当前下标的变量名
    <view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
      {{idx}}: {{itemName.message}}
    </view>
     
    ②wx:if  微信小程序条件渲染,通常是在if里面写判断语句,满足条件就执行这个view控件,通常有if对应就有else,对应的不满足if条件就执行else对应的view控件
    <view wx:if="{{length > 5}}"> 1 </view>
    <view wx:elif="{{length > 2}}"> 2 </view>
    <view wx:else> 3 </view>

    点击扫描效果预览免费下载免登陆网盘下载
    标签:
    * 懒人模板承诺:本站所有资源免费下载,无病毒,无弹窗,无干扰链接! 提点建议