微信小程序 - 展开收缩列表

Posted Sunsin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序 - 展开收缩列表相关的知识,希望对你有一定的参考价值。

代码源自于:微信小程序示例官方

 

 

 

 

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 })

 

点击下载源码:示例-小程序展开收缩列表

以上是关于微信小程序 - 展开收缩列表的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

微信小程序代码片段分享

微信小程序实现文本的展开与收起

微信小程序视图层WXML_模板

微信小程序怎么实现内容的展开和收起?

7-微信小程序 模板(template)