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

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

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

微信小程序 - 展开收缩列表的相关文章

微信小程序,我的英雄列表

最近微信小程序炒得火热,就跟成都的这个房价一样.昨天我也尝试了一下,做了一个自己的英雄列表.今天将自己的制作过程记录于此. 1.下载微信开发者工具 官网链接:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1475052055364,下载完成之后默认安装即可 2.新建项目 打开微信开发者工具,(首次需要微信扫码登录),如下图所示,点击添加项目,然后依次输入APPID,项目名称,并选择你的项目所在的目录(本地目录

微信小程序之多列表的显示和隐藏功能(附源码)

今天在项目碰到一个问题,之前在项目首页实现单列表的显示和隐藏,通过wx:if判断就可实现,现在要实现多列表的单项显示和隐藏功能应该如何实现呢?如果还用wx:if实现的话会出现点击一个列表项,多个列表同时显示和隐藏,明显不适合功能需求,然后简单地查了资料也没发现有类似的功能,最后思考一番后,慢慢地理清了思路... 效果图: 实现思路: 实现单个列表的显示和隐藏应该使用唯一元素让程序知道你应该显示和隐藏哪个列表项,可以用数据的id: css中定义一个hidden{display:none}控制显示和

微信小程序点击列表跳转到对应详情页

点击列表跳转到对应详情页: 用自定义属性data-index保存当前点击列表的index,在点击跳转的方法中获取index并且拼接到要跳转的路径后面: 跳转到详情页,在onLoad钩子中通过参数options获取传过来的index,渲染对应的数据 原文地址:https://www.cnblogs.com/zxmonster/p/11583729.html

微信小程序点击列表添加 去除属性

首先说一下场景:我所循环的数据是对象数组,设置了一个属性当作标记,通过这个标记的值判断是否给改元素添加样式 wxml: <view> <view wx:for="{{list}}" wx:key="num" class="list" > <text bindtap='changColor' data-index='{{index}}' class='{{item.check?"text-active&quo

微信小程序_基础组件大全

微信小程序_基础组件 微信小程序为小程序开发者提供了一系列小程序基础组件,开发者可以通过组合这些小程序基础组件进行微信小程序的快速开发. 微信小程序组件是什么?微信小程序组件怎么用? 小程序组件是视图层的基本组成单元.小程序组件自带一些功能与微信风格的样式.一个小程序组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之内. <tagname property="value"> Content goes here ... </tagename>

微信小程序新闻网站列表页

在app.json中可以设置所有文件的头部导航颜色 (是window属性的子属性) 在具体页面可以单独设置该页面的导航颜色 (直接写该属性,不需要写window属性) 查看官方文档,可以看到好多全局属性 而页面配置会覆盖部分window配置 在post.json中添加: { "navigationBarTitleText":"文与字" } 可以实现导航的文字 在小程序中,有些时候使用绝对路径会报错,比如import 因此当你使用绝对路径报错时,可以尝试换成相对路径,

微信小程序调试之【不在以下合法域名列表中】

在微信小程序中进行网络通信,只能和指定的域名进行通信.目前,微信小程序提供如下四种类型的网络请求. 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downloadFile) WebSocket通信(wx.connectSocket) 目前,无论上述哪一种请求方式,都有次数限制.本文记录的是,我在使用豆瓣论坛API请求时,遇到的错误截图及解决办法.简记如下: 一.问题截图 小程序调试中,遇到如下错误提示: "xxx不在以下合法域名列表中 ,请参

微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html

微信小程序  不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html 友情提示: 大家在开发的时候,可以使用我的网站地址进行测试 配置 request 合法域名  https://liaolongjun.duapp.com request 可以拷贝下面的,不用做任何修改 wx.request({    url: 'https://liaolongjun.duapp.com/ace/h

微信小程序实现给循环列表点击添加类(单项和多项)

在微信小程序里面没有DOM对象, 不能操作DOM. 所有的操作通过数据来实现,下面主要实现了给循环列表点击添加类的操作 一.单项 目标需求:实现下图,给点击的view增加类,每次只能选择一个. 主要思路:给点击的view增加类,依靠点击的index对state进行赋值.如果相同时,给该view增加类. 实现代码: .wxml文件 1 <view> 2 <view class='appointent-date'> 3 <view class="appointent-d