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

看到一个需求,对一些前端小白或者刚开始写小程序的人来说,可能会有点帮助,效果如下:微信小程序怎么实现内容的展开和收起

就是以上效果,废话不多说,上代码wxml:

<view class='list_box' wx:for='{{list}}' wx:key='this' wx:for-item='parentItem' wx:for-index='parentIndex' ><view class='list'><view class='list_name_box' catchtap='listTap' data-parentindex='{{parentIndex}}'><text class='list_item_name'>{{parentItem.listName}}</text><image src='/img/down.png' class='icon_down {{parentItem.show&&"icon_down_rotate"}}'></image></view><view class='list_item_box' wx:if='{{parentItem.show}}'><view class='list_item' wx:for='{{parentItem.item}}' wx:key='this' catchtap='listItemTap' data-index='{{index}}'  data-parentindex='{{parentIndex}}'><view class='list_item_name_box'><text class='list_item_name'>{{item.itemName}}</text><image src='/img/down.png' class='icon_down {{item.show&&"icon_down_rotate"}}'></image></view><view class='other_box' wx:if='{{item.show}}'><view class='other'><text class='other_title'>内容:</text><text class='other_text'>{{item.content}}</text></view><view class='other'><text class='other_title'>时间:</text><text class='other_text'>{{item.time}}</text></view></view></view></view></view></view>

然后wxss:

page{background: #f3f7f7;}.list_name_box{background: #fff;border-bottom: 1px solid #efefef;display: flex;height: 90rpx;align-items: center;padding: 0 25rpx;font-size: 32rpx;}.list_item_name{flex: 1;}.icon_down{width: 35rpx;height:35rpx;transition:transform  0.3s;}/* .list_item_box{height: 0;transition:height  0.3s;overflow: hidden;}.list_item_box_show{height: 500rpx;} */.list_item_name_box{background: #fff;font-size: 30rpx;height: 80rpx;display: flex;align-items: center;padding: 0 25rpx 0 50rpx;}.other{display: flex;height: 80rpx;padding: 0 25rpx 0 50rpx;align-items: center;font-size: 30rpx;color: #666;}.icon_down_rotate{transform:rotate(180deg);}

JS:

// pages/dome/dome.jsPage({/*** 页面的初始数据*/data: {list:[{listName:'列表1',item:[{itemName:'子列表1-1',content:'1-1中的内容',time: '2015-05-06'}, {itemName: '子列表1-2',content: '1-2中的内容',time: '2015-04-13'}, {itemName: '子列表1-3',content: '1-3中的内容',time: '2015-12-06'}]},{listName: '列表2',item: [{itemName: '子列表2-1',content: '2-1中的内容',time: '2017-05-06'}, {itemName: '子列表2-2',content: '2-2中的内容',time: '2015-08-06'}, {itemName: '子列表2-3',content: '2-3中的内容',time: '2015-11-06'}]}, {listName: '列表3',item: [{itemName: '子列表3-1',content: '3-1中的内容',time: '2015-05-15'}, {itemName: '子列表3-2',content: '3-2中的内容',time: '2015-05-24'}, {itemName: '子列表1-3',content: '3-3中的内容',time: '2015-05-30'}]}]},//点击最外层列表展开收起listTap(e){console.log('触发了最外层');let Index = e.currentTarget.dataset.parentindex,//获取点击的下标值list=this.data.list;list[Index].show = !list[Index].show || false;//变换其打开、关闭的状态if (list[Index].show){//如果点击后是展开状态,则让其他已经展开的列表变为收起状态this.packUp(list,Index);}this.setData({list    });},//点击里面的子列表展开收起listItemTap(e){let parentindex = e.currentTarget.dataset.parentindex,//点击的内层所在的最外层列表下标Index=e.currentTarget.dataset.index,//点击的内层下标list=this.data.list;console.log(list[parentindex].item,Index);list[parentindex].item[Index].show = !list[parentindex].item[Index].show||false;//变换其打开、关闭的状态if (list[parentindex].item[Index].show){//如果是操作的打开状态,那么就让同级的其他列表变为关闭状态,保持始终只有一个打开for (let i = 0, len = list[parentindex].item.length;i<len;i++ ){if(i!=Index){list[parentindex].item[i].show=false;}}}this.setData({list});},//让所有的展开项,都变为收起packUp(data,index){for (let i = 0, len = data.length; i < len; i++) {//其他最外层列表变为关闭状态if(index!=i){data[i].show = false;for (let j=0;j<data[i].item.length;j++){//其他所有内层也为关闭状态data[i].item[j].show=false;}}}},onLoad: function (options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 页面上拉触底事件的处理函数*/onReachBottom: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}})作者:链接:https://www.imooc.com/article/30662来源:慕课网本文原创发布于慕课网 ,转载请注明出处,谢谢合作

分类:

技术点:

相关文章:

猜你喜欢
相关资源
相似解决方案
热门标签
Java Python linux javascript C# Mysql Docker 算法 前端 SpringBoot Redis Vue spring .net 设计模式 .net core c++ kubernetes 数据库 机器学习 大数据 数据结构 微服务 js 人工智能 Go Android 面试 程序员 JVM 云原生 后端 ASP.net core 深度学习 CSS k8s git golang PHP devops Nginx Django React mybatis 架构 多线程 Spring Boot 云计算 LeetCode 分布式

深圳SEO优化公司安庆阿里店铺运营多少钱德宏网站推广报价黄石网站搜索优化公司聊城网站制作多少钱阜阳网页设计报价昭通网站推广系统吉祥网络营销推荐昭通网站改版临夏外贸网站制作哪家好荆州网络推广多少钱长沙企业网站设计深圳外贸网站建设推荐桂林网站优化软件公司坑梓模板制作价格曲靖网站改版资阳至尊标王报价三亚网站设计报价光明网络营销价格百色网络广告推广报价新余百度标王推荐龙岩阿里店铺托管推荐大鹏外贸网站制作哪家好桂林网站建设设计杭州seo网站优化报价黄石百度关键词包年推广推荐鹰潭百度网站优化排名多少钱昌都高端网站设计保定优秀网站设计价格南昌百度网站优化丽江百姓网标王多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化