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

一、单项

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

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

实现代码

.wxml文件

 <view>
<view class='appointent-date'>
<view class="appointent-date-div {{state==index?'active-tag':''}}" bindtap="select_date" wx:for="{{dates}}" data-key='{{index}}'>
<view class="flex-item" >
<rich-text class='data_name'>{{item.data_name}}</rich-text>
<rich-text>{{item.name}}</rich-text>
</view>
</view>
</view>
</view>

.wxss文件

 .appointent-date-div{
display:inline-block;
width:20%;
text-align: center;
margin-top: 30rpx;
}
.flex-item{
display: inline-block;
width:96rpx;
height: 88rpx;
font-size: 26rpx;
border:2rpx solid #999;
text-align: center;
border-radius: 10rpx;
color: #999;
cursor: pointer;
line-height: 30rpx;
}
.data_name{
font-size: 36rpx;
line-height: 52rpx; }
.active-tag .flex-item{
background: #c8321e;
color:#fff;
border:1rpx solid #fff;
}

.js文件

 Page({

   /**
* 页面的初始数据
*/
data: {
dates: [
{ "data_name": "30", "name": "十三"},
{ "data_name": "1", "name": "十四"},
{ "data_name": "2", "name": "十五"},
{ "data_name": "3", "name": "十六"},
{ "data_name": "4", "name": "十七"},
{ "data_name": "5", "name": "十八"},
{ "data_name": "6", "name": "十九"},
{ "data_name": "7", "name": "二十"},
{ "data_name": "8", "name": "廿一"},
{ "data_name": "9", "name": "廿二"},
{ "data_name": "10", "name": "廿三"},
{ "data_name": "11", "name": "廿四"},
{ "data_name": "12", "name": "廿五"},
{ "data_name": "13", "name": "廿六"},
{ "data_name": "14", "name": "廿七"}
],
state:''
},
//选择日期后加样式
select_date: function (e) {
this.setData({
state: e.currentTarget.dataset.key,
});
},
})

二,多项

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

主要思路

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

实现代码:

.wxml文件

 <view class='appointent-date'>
<view class="appointent-date-div {{item.state==1?'active-tag':''}}" bindtap="select_date" wx:for="{{dates}}" data-key='{{index}}'>
<view class="flex-item" >
<rich-text class='data_name'>{{item.data_name}}</rich-text>
<rich-text>{{item.name}}</rich-text>
</view>
</view>
</view>

.wxss文件

 .appointent-date{
padding:10rpx 30rpx 40rpx 30rpx;
background: #fff;
box-sizing: border-box;
}
.appointent-date-div{
display:inline-block;
width:20%;
text-align: center;
margin-top: 30rpx;
}
.flex-item{
display: inline-block;
width:96rpx;
height: 88rpx;
font-size: 26rpx;
border:2rpx solid #999;
text-align: center;
border-radius: 10rpx;
color: #999;
cursor: pointer;
line-height: 30rpx;
}
.data_name{
font-size: 36rpx;
line-height: 52rpx; }
.active-tag .flex-item{
background: #c8321e;
color:#fff;
border:1rpx solid #fff;
}

.js文件

 Page({

   /**
* 页面的初始数据
*/
data: {
dates: [
{ "data_name": "30", "name": "十三", "state": 0 },
{ "data_name": "1", "name": "十四", "state": 0 },
{ "data_name": "2", "name": "十五", "state": 0 },
{ "data_name": "3", "name": "十六", "state": 0 },
{ "data_name": "4", "name": "十七", "state": 0 },
{ "data_name": "5", "name": "十八", "state": 0 },
{ "data_name": "6", "name": "十九", "state": 0 },
{ "data_name": "7", "name": "二十", "state": 0 },
{ "data_name": "8", "name": "廿一", "state": 0 },
{ "data_name": "9", "name": "廿二", "state": 0 },
{ "data_name": "10", "name": "廿三", "state": 0 },
{ "data_name": "11", "name": "廿四", "state": 0 },
{ "data_name": "12", "name": "廿五", "state": 0 },
{ "data_name": "13", "name": "廿六", "state": 0 },
{ "data_name": "14", "name": "廿七", "state": 0 }
]
},
//选择日期后加样式
select_date: function (e) {
var index = e.currentTarget.dataset.key;
if (this.data.dates[index].state == 1) {
this.data.dates[index].state = 0;
} else if (this.data.dates[index].state == 0) {
this.data.dates[index].state = 1;
}
this.setData({
dates: this.data.dates,
});
},
})

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

  1. 微信小程序实现给循环列表添加点击样式实例

    微信小程序有个属性hover-class='active',是指当点击列表元素时当按下鼠标左键会显示active样式,但是鼠标离开样式就会复原.可以参考以下解决方案,直接上代码: wxml: ? 1 ...

  2. 微信小程序编写新闻阅读列表

    微信小程序编写新闻阅读列表 不忘初心,方得始终:初心易得,始终难守. 本篇学习主要内容 Swiper 组件(轮播图) App.json 里的关于导航栏.标题的配置. Page 页面与应用程序的生命周期 ...

  3. 微信小程序wepy开发循环wx:for需要注意

    微信小程序wepy开发循环wx:for需要注意 item index值必须在wx:for之后使用 <view wx:for="{{tablist}}" class=" ...

  4. 微信小程序之for循环

    在微信小程序中也有for循环,用于进行列表渲染. 官方实例 打开微信开发者文档,在框架部分的视图层-->wxml-->列表渲染中可以看到官方给出的for循环实例,在实例中 可以看到下面相关 ...

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

    比如:如果在微信小程序中要遍历输出 0-9 的数,我们会使用for循环 ;i<;i++){ console.log(i); } 确实结果也是这样: 但是,如果我在循环时同时调用wx的api接口1 ...

  6. 微信小程序wx:for循环

    最近做微信小程序碰到了一些问题,和wx:for循环相关,wx:for有很多用途,例如可以用于swiper中图片的循环,也就是所谓的轮播图,也可以用于其它的循环,可以大大地减少代码量. 但wx:for. ...

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

    场景 在使用小程序的时候会出现这样一种情况:当网络条件差或卡顿的情况下,使用者会认为点击无效而进行多次点击,最后出现多次跳转页面的情况,就像下图(快速点击了两次): 解决办法 然后从 轻松理解JS函数 ...

  8. 微信小程序——实现动画循环播放

    今天在做砍价页面的时候需要将一个按钮动起来,效果图如下: 其实它实现的原理很简单,就是循环的缩小放大. css3中的animate 有个属性是 animation-iteration-count 可以 ...

  9. 微信小程序开发——超链接或按钮点击跳转到其他页面失效

    1. 超链接导航失效: 小程序规则——wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabbar 页面,只能用 wx.switchTab 跳转到 tabbar 页面

随机推荐

  1. ubuntu16下的/etc/resolv.conf重置的解决方案

    此文件存放了网络网关信息,重启后会刷新,刷新来源有两个可能 一个是根据文件中的resolvconf目录下的resolv.conf.d目录下的base文件 另一个来源是/etc/network/inte ...

  2. rails 部署 can't find gem bundler (>= 0.a) with executable bundle

    多方寻找终得果,先感谢原作者,原作者博文 原因是本地项目bundler 和 服务器 bundler 版本不一致导致,项目是在本地建立,故Gemfile.lock最后一行BUNDLED WITH中是1. ...

  3. 一道区间DP的水题 -- luogu P2858 [USACO06FEB]奶牛零食Treats for the Cows

    https://www.luogu.org/problemnew/show/P2858 方程很好想,关键我多枚举了一次(不过也没多大关系) #include <bits/stdc++.h> ...

  4. Codeforces 1103 简要题解(持续更新)

    文章目录 A题 B题 C题 D题 传送门 又一场原地爆炸的比赛. A题 传送门 简单思维题 题意:给一个4∗44*44∗4的格子图和一个01串,你要根据01串放1∗21*21∗2的木块,如果是0就竖放 ...

  5. 2018.11.07 codeforces559C. Gerald and Giant Chess(dp+组合数学)

    传送门 令f[i]f[i]f[i]表示对于第iii个棋子,从(1,1)(1,1)(1,1)出发到它不经过其它棋子的方案数. 于是我们假设(h,w)(h,w)(h,w)有一个棋子,求出它的fff值就可以 ...

  6. 2018.06.26「TJOI2018」数学计算(线段树)

    描述 小豆现在有一个数 xxx ,初始值为 111 . 小豆有 QQQ 次操作,操作有两种类型: 111 $ m$ : x=x×mx=x×mx=x×m ,输出 xxx modmodmod MMM : ...

  7. java常用设计模式八:代理模式

    一.概述 代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 其特征是代理类与委托类有同样的接口,真正的核心业务逻辑还是在实际对象里面. 二.为什么要使用代理模式 当 ...

  8. Mysql中Left Join Right Join Inner Join where条件的比较

    建立一对多的表 company 和 employee company表 id      name      address 1baidu北京 2huawei深圳 3jingdong北京 4tengxu ...

  9. Struts2之ModelDriven和Preparable拦截器

    首先struts.xml文件配置如下 默认拦截器设置为paramsPrepareParamsStack <package name="default" namespace=& ...

  10. Redis模块开发示例

    实现一个Redis module,支持两个扩展命令: 1) 可同时对hash的多个field进行incr操作: 2) incrby同时设置一个key的过期时间 在没有module之前,需要借助eval ...