代码源自于:微信小程序示例官方
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 })
点击下载源码:示例-小程序展开收缩列表
原文地址:https://www.cnblogs.com/cisum/p/9729766.html
时间: 2024-11-10 05:19:52