分类
先用view写个主盒子,之后里面再写两个view,一个左一个右,
if条件判断,当条件为真时,渲染显示页面,为假时,不渲染
for循环,循环数组并渲染到页面
bindtap点击事件在同一个view中会向上冒泡,而catchtap 不会向上冒泡
js里获取数据
category.wxml
<!--pages/category/category.wxml-->
<!--主盒子-->
<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>
category.js
Page({
data: {
cateItems: [
{
cate_id: 1,
cate_name: "护肤",
ishaveChild: true,
children:
[
{
child_id: 1,
name: '洁面皂',
image:"https://img.alicdn.com/bao/uploaded/i2/762503384/O1CN01Ontfxf1aruyJmtpoS_!!762503384.jpg"
},
{
child_id: 2,
name: '卸妆',
image: "https://tse1-mm.cn.bing.net/th/id/OIP-C.C-6yBbI2P-r-Jin3Rx4uvwHaHa?w=1691807051.251.7"
},
{
child_id: 3,
name: '洁面乳',
image: "https://tse1-mm.cn.bing.net/th/id/OIP-C.W3A9Ae-77ViY0Ym5kLoYrQHaE8?pid=ImgDet1"
},
{
child_id: 4,
name: '面部祛角质',
image: "https://pic2.zhimg.com/v2-d5ec8919ed3d2338da72f2b422176466_r.jpg?source=1940ef5c"
},
{
child_id: 5,
name: '手模',
image: "https://cf.shopee.sg/file/763975892f3e35a1134ecee67c960023"
},
{
child_id: 6,
name: '面模',
image: "https://tse1-mm.cn.bing.net/th/id/R-C.bc5fa3b1fcadfcaf6000ccc191b7a011?rik=EUVv5c0zGdZXvQhttp%3a%2f%2fwww.tianya999.com%2fuploads%2fallimg%2f190103%2f2308-1Z103160S2.jpgY7sTZHFuE8lBIrAch0e4%2brkqVYTwPGUnJ0Bf%2bqlRRcQ%3dImgRaw0"
},
{
child_id: 7,
name: '水乳',
image: "https://tse2-mm.cn.bing.net/th/id/OIP-C.GA29iySCOk-SZL4ZBz8EbwD6D6?w=1581767051.251.7"
},
{
child_id: 8,
name: '洗头膏',
image: "https://tse3-mm.cn.bing.net/th/id/OIP-C.oEc37QR3kQmLOBFj5os1JwHaHa?w=2102107051.251.7"
},
]
},
{
cate_id: 2,
cate_name: "彩妆",
ishaveChild: true,
children:
[
{
child_id: 1,
name: '气垫bb',
image: "https://tse2-mm.cn.bing.net/th/id/OIP-C.sYfELdmLlMW5okmZj8ByMwHaHa?w=2022027051.251.7"
},
{
child_id: 2,
name: '修容/高光',
image: "https://tse2-mm.cn.bing.net/th/id/OIP-C.IyiKOwJIJDh96UiJD70-8wHaHa?w=1821827051.251.7"
},
{
child_id: 3,
name: '遮瑕',
image: "https://tse1-mm.cn.bing.net/th/id/OIP-C.aeJCqLv0rRgH45HI1mQviwHaHa?w=1801807051.251.7"
},
{
child_id: 4,
name: '腮红',
image: "https://tse2-mm.cn.bing.net/th/id/OIP-C.JEAMu81FjOhUzrlZfZScmwHaHa?w=1731807051.251.7"
},
{
child_id: 5,
name: '粉饼',
image: "https://tse2-mm.cn.bing.net/th/id/OIP-C.AvbnA6eIwW9k1N3B7HL21gHaHC?w=1941847051.251.7"
},
{
child_id: 6,
name: '粉底',
image: "https://tse4-mm.cn.bing.net/th/id/OIP-C.U3YDK9QXvGFcN6vefgPouAHaFK?w=2721897051.251.7"
},
{
child_id: 7,
name: '蜜粉/散粉',
image: "https://tse2-mm.cn.bing.net/th/id/OIP-C.deE_i9XVcUVPYrnSVpbGVQHaGD?w=2482037051.251.7"
},
{
child_id: 8,
name: '隔离霜',
image: "https://tse2-mm.cn.bing.net/th/id/OIP-C.FDekzmg0N_EoNoZ7_QNa8AHaHa?w=1951957051.251.7"
}
]
},
{
cate_id: 3,
cate_name: "香水",
ishaveChild: true,
children:
[
{
child_id: 1,
name: '淡香水EDT',
image: "https://tse3-mm.cn.bing.net/th/id/OIP-C.L22gqjdMg1THBTMcvnv8TAHaHa?w=1981977051.251.7"
},
{
child_id: 2,
name: '浓香水EDP',
image: "https://tse3-mm.cn.bing.net/th/id/OIP-C.mawe6N3JwRaNlkkHdzxIewHaHa?w=2112117051.251.7"
},
{
child_id: 3,
name: '香体走珠',
image: "https://tse3-mm.cn.bing.net/th/id/OIP-C.b_7ZFhZYxEZ_kezpDXxPHgHaHa?w=2102107051.251.7"
},
{
child_id: 4,
name: '古龙香水男士的最爱',
image: "https://tse4-mm.cn.bing.net/th/id/OIP-C._hsXM7Dv7FFyNbfj44A9JAEsEs?w=1761807051.251.7"
}
]
},
{
cate_id: 4,
cate_name: "女装",
ishaveChild: false,
children: []
},
{
cate_id: 5,
cate_name: "男装",
ishaveChild: false,
children: []
},
{
cate_id: 6,
cate_name: "女鞋",
ishaveChild: false,
children: []
},
{
cate_id: 7,
cate_name: "男鞋",
ishaveChild: false,
children: []
},
{
cate_id: 8,
cate_name: "母婴",
ishaveChild: false,
children: []
},
{
cate_id: 9,
cate_name: "电器",
ishaveChild: false,
children: []
},
{
cate_id: 10,
cate_name: "手机",
ishaveChild: false,
children: []
},
{
cate_id: 11,
cate_name: "百货",
ishaveChild: false,
children: []
},
{
cate_id: 12,
cate_name: "箱包",
ishaveChild: false,
children: []
},
{
cate_id: 13,
cate_name: "进口",
ishaveChild: false,
children: []
},
{
cate_id: 14,
cate_name: "食品",
ishaveChild: false,
children: []
},
{
cate_id: 15,
cate_name: "数码",
ishaveChild: false,
children: []
},
{
cate_id: 16,
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
})
}
})
category.wxss
/* pages/category/category.wxss */
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;
}
效果图