实现抽屉列表-微信小程序

简介: 本抽屉列表的实现方法来自与微信小程序的官方实例,本人将有关代码及样式提取了出来并加以精简、添加注释,方便大家的学习与理解。实现效果JS Page({ data: { list: [ { id:...

本抽屉列表的实现方法来自与微信小程序的官方实例,本人将有关代码及样式提取了出来并加以精简、添加注释,方便大家的学习与理解。


img_f0aeea776c66da09d6f8cd8906d94d84.gif
实现效果

JS

  Page({
  data: {
    list: [
      {
        id: 0,
        name: '抽屉列表1',
        open: false,
        options: ['选项1', '选项2', '选项3']
      },
      {
        id: 1,
        name: '抽屉列表2',
        open: false,
        options: ['选项1', '选项2', '选项3']
      },
      // 增加列表请在此处添加新的列表对象
    ]
  },

  // 控制抽屉开关
  kindToggle: function (e) {
    var id = e.currentTarget.id, list = this.data.list;

    // 使用id获取打开的子列表
    for (var i = 0, len = list.length; i < len; ++i) {
      if (list[i].id == id) {
        list[i].open = !list[i].open
      } else {
        list[i].open = false
      }
    }
    this.setData({
      list: list
    });
  }
})

WXML

<block wx:for-items="{{list}}" wx:key="{{item.id}}">
  <!-- 列表item -->
  <view class="list-item">
    <view id="{{item.id}}" class="list-item-hd {{item.open ? 'list-item-hd-show' : ''}}" bindtap="kindToggle">
      <view class="list-title">{{item.name}}</view>
      <view class="{{item.open ? 'state-arrow-open' : ''}}">▼</view>
    </view>

    <!-- 打开的抽屉item -->
    <view class="list-item-bd {{item.open ? 'list-item-bd-show' : ''}}">
      <view class="option-box {{item.open ? 'option-box-show' : ''}}">
        <!-- 子选项 -->
        <block wx:for-items="{{item.options}}" wx:for-item="options" wx:key="*item">
          <view class="option">
            <view class="option-text">{{options}}</view>
            <view >></view>
          </view>
        </block>
      </view>
    </view>

  </view>
</block>

WXSS



.list-item {
  margin: 20rpx 0;
  background-color: #FFFFFF;
  border-radius: 4rpx;
  overflow: hidden;
}

.list-item-hd {
  padding: 30rpx;
  display: flex;
  align-items: center;

  transition: opacity .3s;
}
.list-item-hd-show {
  opacity: .2;
}
.list-title{
  flex: 1;
}
.list-item-bd {
  height: 0;
  overflow: hidden;
}
.list-item-bd-show {
  height: auto;
}
.option-box {
  opacity: 0;
  position: relative;
  background-color: #FFFFFF;
  line-height: 1.41176471;
  font-size: 34rpx;

  transform: translateY(-50%);
  transition: .3s;
}
.option-box-show {
  opacity: 1;
  transform: translateY(0);
}

.state-arrow-open {
  transform: rotate(180deg);
  transition: transform 0.3s;
}

.option {
  padding: 20rpx 30rpx;
  position: relative;
  display: flex;
  align-items: center;
}

.option:before {
  content: " ";
  position: absolute;
  left: 30rpx;
  top: 0;
  right: 30rpx;
  height: 1px;
  border-top: 1rpx solid #D8D8D8;
  color: #D8D8D8;
}
.option:first-child:before {
  display: none;
}
.option-text {
  flex: 1;
}
目录
相关文章
|
小程序 API 数据库
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
419 0
|
小程序 前端开发 索引
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
这篇文章介绍了微信小程序中条件渲染和列表渲染的使用方法,包括wx:if、wx:elif、wx:else、wx:for、wx:key以及block标记和hidden属性的使用。
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
|
小程序
【微信小程序-原生开发】列表 - 拖拽排序(官方组件 movable-area 和 movable-view 的用法)
【微信小程序-原生开发】列表 - 拖拽排序(官方组件 movable-area 和 movable-view 的用法)
1715 0
|
小程序 开发者
【微信小程序】 微信小程序报错不在以下request合法域名列表中
【微信小程序】 微信小程序报错不在以下request合法域名列表中
2919 0
|
小程序 数据库 C++
【微信小程序-原生开发】实用教程17 - 详情页触发列表页刷新,点击图片放大预览,转发给好友/群,分享到朋友圈
【微信小程序-原生开发】实用教程17 - 详情页触发列表页刷新,点击图片放大预览,转发给好友/群,分享到朋友圈
247 0
|
小程序 数据库
【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)
【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)
627 0
|
JSON 小程序 数据库
【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)
【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)
588 0
|
小程序 JavaScript 前端开发
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
627 0
|
6月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。