代码源自于:微信小程序示例官方
index.wxml
1 <block wx:for-items="{{list}}" wx:key="{{item.id}}">
2 <view class="kind-list-item">
3 <view id="{{item.id}}" class="kind-list-item-hd {{item.open ? ‘kind-list-item-hd-show‘ : ‘‘}}" bindtap="kindToggle">
4 <view class="kind-list-text">{{item.name}}</view>
5 </view>
6 <view class="kind-list-item-bd {{item.open ? ‘kind-list-item-bd-show‘ : ‘‘}}">
7 <view class="navigator-box {{item.open ? ‘navigator-box-show‘ : ‘‘}}">
8 <block wx:for-items="{{item.pages}}" wx:for-item="page" wx:key="*item">
9 <navigator url="pages/{{page}}/{{page}}" class="navigator">
10 <view class="navigator-text">{{page}}</view>
11 <!-- icon -->
12 <view class="navigator-arrow"></view>
13 </navigator>
14 </block>
15 </view>
16 </view>
17 </view>
18 </block>
index.css
1 .navigator-box {
2 opacity: 0;
3 position: relative;
4 background-color: #fff;
5 line-height: 1.41176471;
6 font-size: 34rpx;
7 transform: translateY(-50%);
8 transition: 0.3s;
9 }
10
11 .navigator-box-show {
12 opacity: 1;
13 transform: translateY(0);
14 }
15
16 .navigator {
17 padding: 20rpx 30rpx;
18 position: relative;
19 display: flex;
20 align-items: center;
21 }
22
23 .navigator:before {
24 content: " ";
25 position: absolute;
26 left: 30rpx;
27 top: 0;
28 right: 30rpx;
29 height: 1px;
30 border-top: 1rpx solid #d8d8d8;
31 color: #d8d8d8;
32 }
33
34 .navigator:first-child:before {
35 display: none;
36 }
37
38 .navigator-text {
39 flex: 1;
40 }
41
42 .navigator-arrow {
43 padding-right: 26rpx;
44 position: relative;
45 }
46
47 .navigator-arrow:after {
48 content: " ";
49 display: inline-block;
50 height: 18rpx;
51 width: 18rpx;
52 border-width: 2rpx 2rpx 0 0;
53 border-color: #888;
54 border-style: solid;
55 transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
56 position: absolute;
57 top: 50%;
58 margin-top: -8rpx;
59 right: 28rpx;
60 }
61
62 .kind-list-item {
63 margin: 20rpx 0;
64 background-color: #fff;
65 border-radius: 4rpx;
66 overflow: hidden;
67 border-bottom: 1px dashed #888;
68 }
69
70 .kind-list-item:first-child {
71 margin-top: 0;
72 }
73
74 .kind-list-text {
75 flex: 1;
76 }
77
78 .kind-list-img {
79 width: 60rpx;
80 height: 60rpx;
81 }
82
83 .kind-list-item-hd {
84 padding: 30rpx;
85 display: flex;
86 align-items: center;
87 transition: opacity 0.3s;
88 }
89
90 .kind-list-item-hd-show {
91 opacity: 0.2;
92 }
93
94 .kind-list-item-bd {
95 height: 0;
96 overflow: hidden;
97 }
98
99 .kind-list-item-bd-show {
100 height: auto;
101 }
index.js
1 Page({
2 data: {
3 list: [{
4 id: ‘view‘,
5 name: ‘视图容器‘,
6 open: false,
7 pages: [‘view‘, ‘scroll-view‘, ‘swiper‘, ‘movable-view‘, ‘cover-view‘]
8 }, {
9 id: ‘content‘,
10 name: ‘基础内容‘,
11 open: false,
12 pages: [‘text‘, ‘icon‘, ‘progress‘, ‘rich-text‘]
13 }, {
14 id: ‘form‘,
15 name: ‘表单组件‘,
16 open: false,
17 pages: [‘button‘, ‘checkbox‘, ‘form‘, ‘input‘, ‘label‘, ‘picker‘, ‘picker-view‘, ‘radio‘, ‘slider‘, ‘switch‘, ‘textarea‘]
18 }, {
19 id: ‘nav‘,
20 name: ‘导航‘,
21 open: false,
22 pages: [‘navigator‘]
23 }, {
24 id: ‘media‘,
25 name: ‘媒体组件‘,
26 open: false,
27 pages: [‘image‘, ‘audio‘, ‘video‘, ‘camera‘]
28 }, {
29 id: ‘map‘,
30 name: ‘地图‘,
31 pages: [‘map‘]
32 }, {
33 id: ‘canvas‘,
34 name: ‘画布‘,
35 pages: [‘canvas‘]
36 }, {
37 id: ‘open‘,
38 name: ‘开放能力‘,
39 pages: [‘ad‘, ‘open-data‘, ‘web-view‘]
40 }]
41 },
42
43 /**
44 * 收缩核心代码
45 */
46 kindToggle(e) {
47 const id = e.currentTarget.id
48 const list = this.data.list
49 for (let i = 0, len = list.length; i < len; ++i) {
50 if (list[i].id === id) {
51 list[i].open = !list[i].open
52 } else {
53 list[i].open = false
54 }
55 }
56
57 /**
58 * key和value名称一样时,可以省略
59 *
60 * list:list=>list
61 */
62 this.setData({
63 list
64 })
65 }
66 })
点击下载源码:示例-小程序展开收缩列表