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

在微信小程序里面没有DOM对象, 不能操作DOM. 所有的操作通过数据来实现,下面主要实现了给循环列表点击添加类的操作

一、单项

目标需求:实现下图,给点击的view增加类,每次只能选择一个。

主要思路:给点击的view增加类,依靠点击的index对state进行赋值。如果相同时,给该view增加类。

实现代码

.wxml文件

 1 <view>
 2   <view class=‘appointent-date‘>
 3     <view  class="appointent-date-div {{state==index?‘active-tag‘:‘‘}}" bindtap="select_date"  wx:for="{{dates}}" data-key=‘{{index}}‘>
 4       <view class="flex-item" >
 5         <rich-text class=‘data_name‘>{{item.data_name}}</rich-text>
 6         <rich-text>{{item.name}}</rich-text>
 7       </view>
 8     </view>
 9   </view>
10 </view>

.wxss文件

 1 .appointent-date-div{
 2   display:inline-block;
 3   width:20%;
 4   text-align: center;
 5   margin-top: 30rpx;
 6 }
 7 .flex-item{
 8   display: inline-block;
 9   width:96rpx;
10   height: 88rpx;
11   font-size: 26rpx;
12   border:2rpx solid #999;
13   text-align: center;
14   border-radius: 10rpx;
15   color: #999;
16   cursor: pointer;
17   line-height: 30rpx;
18 }
19 .data_name{
20   font-size: 36rpx;
21   line-height: 52rpx;
22
23 }
24 .active-tag .flex-item{
25   background: #c8321e;
26   color:#fff;
27   border:1rpx solid #fff;
28 }

.js文件

 1 Page({
 2
 3   /**
 4    * 页面的初始数据
 5    */
 6   data: {
 7     dates: [
 8       { "data_name": "30", "name": "十三"},
 9       { "data_name": "1", "name": "十四"},
10       { "data_name": "2", "name": "十五"},
11       { "data_name": "3", "name": "十六"},
12       { "data_name": "4", "name": "十七"},
13       { "data_name": "5", "name": "十八"},
14       { "data_name": "6", "name": "十九"},
15       { "data_name": "7", "name": "二十"},
16       { "data_name": "8", "name": "廿一"},
17       { "data_name": "9", "name": "廿二"},
18       { "data_name": "10", "name": "廿三"},
19       { "data_name": "11", "name": "廿四"},
20       { "data_name": "12", "name": "廿五"},
21       { "data_name": "13", "name": "廿六"},
22       { "data_name": "14", "name": "廿七"}
23     ],
24     state:‘‘
25   },
26   //选择日期后加样式
27   select_date: function (e) {
28     this.setData({
29       state: e.currentTarget.dataset.key,
30     });
31   },
32 })

二,多项

目标需求:实现下图,给点击的view增加类,再次点击时取消,可以多项选择。

主要思路

给dates数组增加一个属性state, 1表示状态选中,0表示未选中,每次点击时修改active的值。

实现代码:

.wxml文件

1 <view class=‘appointent-date‘>
2     <view  class="appointent-date-div {{item.state==2?‘active-tag‘:‘‘}}" bindtap="select_date"  wx:for="{{dates}}" data-key=‘{{index}}‘>
3       <view class="flex-item" >
4         <rich-text class=‘data_name‘>{{item.data_name}}</rich-text>
5         <rich-text>{{item.name}}</rich-text>
6       </view>
7     </view>
8   </view>

.wxss文件

 1 .appointent-date{
 2   padding:10rpx 30rpx 40rpx 30rpx;
 3   background: #fff;
 4   box-sizing: border-box;
 5 }
 6 .appointent-date-div{
 7   display:inline-block;
 8   width:20%;
 9   text-align: center;
10   margin-top: 30rpx;
11 }
12 .flex-item{
13   display: inline-block;
14   width:96rpx;
15   height: 88rpx;
16   font-size: 26rpx;
17   border:2rpx solid #999;
18   text-align: center;
19   border-radius: 10rpx;
20   color: #999;
21   cursor: pointer;
22   line-height: 30rpx;
23 }
24 .data_name{
25   font-size: 36rpx;
26   line-height: 52rpx;
27
28 }
29 .active-tag .flex-item{
30   background: #c8321e;
31   color:#fff;
32   border:1rpx solid #fff;
33 }

.js文件

 1 Page({
 2
 3   /**
 4    * 页面的初始数据
 5    */
 6   data: {
 7     dates: [
 8       { "data_name": "30", "name": "十三", "state": 0 },
 9       { "data_name": "1", "name": "十四", "state": 0 },
10       { "data_name": "2", "name": "十五", "state": 0 },
11       { "data_name": "3", "name": "十六", "state": 0 },
12       { "data_name": "4", "name": "十七", "state": 0 },
13       { "data_name": "5", "name": "十八", "state": 0 },
14       { "data_name": "6", "name": "十九", "state": 0 },
15       { "data_name": "7", "name": "二十", "state": 0 },
16       { "data_name": "8", "name": "廿一", "state": 0 },
17       { "data_name": "9", "name": "廿二", "state": 0 },
18       { "data_name": "10", "name": "廿三", "state": 0 },
19       { "data_name": "11", "name": "廿四", "state": 0 },
20       { "data_name": "12", "name": "廿五", "state": 0 },
21       { "data_name": "13", "name": "廿六", "state": 0 },
22       { "data_name": "14", "name": "廿七", "state": 0 }
23     ]
24   },
25   //选择日期后加样式
26   select_date: function (e) {
27     var index = e.currentTarget.dataset.key;
28     if (this.data.dates[index].state == 1) {
29       this.data.dates[index].state = 0;
30     } else if (this.data.dates[index].state == 0) {
31       this.data.dates[index].state = 1;
32     }
33     this.setData({
34       dates: this.data.dates,
35     });
36   },
37 })
时间: 2024-12-13 01:55:23

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

微信小程序实现无限滚动列表(滚动新闻动态列表)

本文实例为大家分享了微信小程序实现无限滚动列表的具体代码,供大家参考,具体内容如下 实现方式是利用小程序原声组件swiper,方向设置为纵向 :vertical=‘true'设置同时显示的滑块数量:display-multiple-items=‘4'设置自动轮播:autoplay:‘true'. 话不所说,直接上代码: <!-- 底部排名 --> <view class='contentBottom'> <view class='BottomFirst'> <te

微信小程序之for循环

在微信小程序中也有for循环,用于进行列表渲染. 官方实例 打开卫星开发者文档,在框架部分的视图层-->wxml-->列表渲染中可以看到官方给出的for循环实例,在实例中 可以看到下面相关说明. 默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item:使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名. test.wxml <view wx:for="{{array}}"

微信小程序中的循环遍历问题

比如:如果在微信小程序中要遍历输出 0-9 的数,我们会使用for循环 for(var i=0;i<10;i++){ console.log(i); } 确实结果也是这样: 但是,如果我在循环时同时调用wx的api接口10次,那么输出的结果就会不同(这是产生了闭关的效应) eg:每次调用一次wx.showToast()接口,并在成功时输出循环的值. for(var i=0;i<10;i++){ wx.showToast({ title: 'haha', success:function(){

微信小程序 - 防果库列表

这个篇文章带大家一起练练微信小程序布局. 下面将会按照以下的顺序介绍: 布局的实现 逻辑的实现 样式的实现 1.布局的实现 最大的布局是view, view布局中包含了:一张图片,文字描述,信息栏和分界线 <!--最外层--> <view class="home-view1"> <!--图片层--> <view class="home-view2"> <image class="home-image1&

关于微信小程序多层嵌套渲染列表以及嵌套列表中数据的获取

起因:意图是想实现类似于安卓viewpager那样的效果,想到了用微信小程序的swiper组件,但如果每个swiper-item里都只用一个wx:for来渲染数据的话实在是太慢了,就想到多层嵌套数据渲染来提高效率. 直接上代码 wxml: <view wx:for="{{one}}" wx:key="id"> <view>----{{item.name}}----</view> <view wx:for="{{it

微信小程序商店 | 即速商店_团购类小程序

即速应用商店-分类最齐全的小程序商店,收录当前最新最热门小程序,汇集各行业小程序案例及评测,在这里可以轻松找到各种实用好玩的小程序,也可 免费发布 自己的小程序获取 巨大流量 . PS:关于微信小程序商店_即速商店?   如何免费发布微信小程序,获取流量? 微信小程序商店|即速商店_团购小程序 要求:该类目下提交的微信小程序须具备购物.团购相关属性.如小程序内发布虚假违法信息,由小程序主体承担.点击 > 即刻提交 < 本期团购小程序推荐: ? 网易一起拼lite 测评:网易一起拼小程序只做优质

微信小程序:防止多次点击跳转(函数节流)

场景 在使用小程序的时候会出现这样一种情况:当网络条件差或卡顿的情况下,使用者会认为点击无效而进行多次点击,最后出现多次跳转页面的情况,就像下图(快速点击了两次): 解决办法 然后从 轻松理解JS函数节流和函数防抖 中找到了解决办法,就是函数节流(throttle):函数在一段时间内多次触发只会执行第一次,在这段时间结束前,不管触发多少次也不会执行函数. /utils/util.js: function throttle(fn, gapTime) { if (gapTime == null ||

微信小程序——template的循环嵌套

上一篇我们有写到 template的使用方法 .在实际运用中,需要做到template里面再嵌套一层循环.我们先看一下数据结构: 模板是用于循环list,现在的需求是在模板里面嵌套一个orderItemList的循环.写法也是wx:for,代码如下: order.orderItemList 里面的order 是你在引用模板的时候,取的for-item名字.还有不懂的可以看template的使用方法 . 前方高能预警!!!到目前为止,都很顺利.可是在用的时候,循环没出来.怎么回事啊...正解如下图

原创:微信小程序bindtap绑定html元素点击事件

什么是事件? 事件是视图层到逻辑层的通讯方式. 事件可以将用户的行为反馈到逻辑层进行处理. 详解(以常见的tap点击事情为例) 模板.wxml代码: <view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view> JS文件代码: Page({ data:{ ... }, onload:function(){ ... }, tapName: f