微信小程序点击切换class

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信小程序点击切换class相关的知识,希望对你有一定的参考价值。

参考技术A

在浏览器端开发时,经常会有这种情况:单击某个元素,让其高亮显示,例如下图

这个用 js 很容易实现, 因为单击事件触发时,函数传入的 event 事件包含 target 对象,里面会有触发事件的 DOM 元素,我们只需要操作这个 DOM 元素,为其添加 class 名就好了。

而在微信小程序开发时,由于其类似于 vue 不建议直接操作 DOM (两者都有API可以做到),事件触发的时候同样会有默认参数传入, 但是无法直接取到 DOM 节点本身,而是包含挂载的一些数据,和点击部位的坐标信息等,具体参阅官方文档 《事件·小程序》 , this 也总是指向 Page ,所以我们就需要 通过数据间接操纵 DOM 来实现。

例如我遇到的问题是,我想做一个月历,当你选中某一天的时候,那一天高亮显示。

由于自己在做这一块时遇到了很多这方面的困惑,所以我在网上看了一些解决方案,下面列举一种在 CSDN 上看到的方案 :

这个方法绑定了一个动态的 class 名,用一个变量 _num 可以做到切换 class 的作用,当点击元素时,js 获取到节点上 data-num 上的值,这里将值赋给变量 _num ,相应的由于是数据驱动,节点上的 class 名经过计算变化为 cur ,其他的同理。

在没有搞清这个方法前,我制作月历是使用的条件渲染。具体做法是,每个日期节点准备两个 DOM 元素,一个带有 class="selected" ,一个没有, 经过列表渲染之后每个单位实际上存在两个逻辑上的元素,这个时候通过点击改变 Page 中 data 里面的 selectedDate 和 selectedDate ,进一步控制 wx:if 的条件来实现元素的渲染与否。

点击事件发生时,获取节点中的 data-month 和 data-date 值, 并赋给 selectedDate 和 selectedDate

由于每个月都有某些日期, 所以加个月份限制 ,这里我设置了只做从这个月到未来6个月的月历,所以不需要加年份限制。

深知这个方案问题很大,是这一类的MVVM框架因的条件渲染切换消耗较大,微信小程序开发文档中介绍了 wx:if 相关 :

当用户点击某个日期的时候会重新渲染整个 DOM ,所以这个方案并不好。

搞懂前面的逻辑,再来看这个方案就会很明白了。

微信小程序点击顶部导航栏切换样式

类似这样的效果

 

 

 

 

 

1 <view class=\'helpCateList\'>
2     <!-- 类别 -->
3     <scroll-view class=\'scroll-view\' scroll-x="true">
4       <view class="item-content"  wx:key="id" wx:for="{{helpCateList}}" wx:for-item="item">
5         <view class="content {{currentTab == item.itemsId ? \'active\' : \'\'}}" data-itemsId=\'{{item.itemsId}}\' bindtap=\'cateChange\' >{{item.itemsName}}  </view>
6       </view>
7     </scroll-view>
8 </view>
 1 .helpDisList .content{
 2   position: relative;
 3   width: 710rpx;
 4   border-radius: 5rpx;
 5 
 6 }
 7 .active{ //当点击的时候添加这个样式
 8   /* border-bottom: 4rpx solid rgb(252, 186, 7); */
 9   color:rgb(252, 186, 7);
10 }
 1 Page({
 2   data:{
 3 
 4     helpCateList:[ //数据从后台请求回来赋值
 5       // { id: "1", desc: "康复医疗" },
 6       // { id: "2", desc: "教育" },
 7       // { id: "3", desc: "就业" },
 8       // { id: "4", desc: "扶贫" },
 9       // { id: "5", desc: "职业培训" },
10       // { id: "6", desc: "社会保障" },
11       // { id: "7", desc: "文化生活" },
12     ],
13     currentTab: 1,
14   },
15   cateChange(e) {
16     console.log(e)
17     let that = this
18     that.setData({
19 
20       currentTab: e.currentTarget.dataset.itemsid, //这个必须要
21 
22     })
23   },

 

 

以上是关于微信小程序点击切换class的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序 导航栏切换视图

微信小程序--多个按钮选中的联动效果

微信小程序下拉按钮动画

微信小程序实现滑动tab切换和点击tab切换并显示相应的数据(附源代码)

微信小程序 按钮效果

微信小程序tab栏切换