小程序---菜单点击效果

这里写图片描述

业务需求点击多选。

网上找了很多方法,都是用不同的常量,然后改变值而达到选中的效果,你们有没有想过很多选项的时候,怎么处理。。无语,只能自己写。

根据那种不太合理的思路思考,是否可以自己设定不同的常量,然后通过改变值来达到选中的效果了?

经过研究测试,得到一种较为复杂,但是能实现的方法。代码如下:

wxml:

 <view class='allTypeList'>
    <view class='allTypeTit'>{{}}类型</view>
    <block wx:for="{{typeList}}" wx:key="typeList" wx:for-index="index">
      <view class="{{_num == 1?'menu-blocking':'menu-block'}}" data-num="{{index}}" bindtap="clickNum">
        <view class="{{item.clas}} menu-name" data-cindex='{{index}}'  data-type='{{item.id}}' bindtap='chooseType'>{{item.name}}</view>
      </view>
    </block>
  </view>

其中特别注意的是 :
1, class=”{{item.clas}} ,这个clas 就是样式。
2, data-cindex=’{{index}}’ 下标。

js:

data:{
types: "", //类型
//clas 其实就是样式
typeList: [   
      { id: 1, name: "天包", clas: '' },
      { id: 2, name: "整包", clas: '' },
      { id: 3, name: "量包", clas: '' }
],
}

基本都有注释,types 存选中项的值,typeList 是数据源,其中 clas 就是样式,现在是空,通过下面的方法,赋值。

核心 js:

//菜单点击效果及数据 -- 类型
 chooseType: function (e) { 
    var type = e.currentTarget.dataset.cindex; //获取点中的参数

    //初始化数据值
    var str = ''; 
    if (this.data.types != '') {
      str = this.data.types;
    }

    //修改新的数据
    var sss = this.data.typeList[type];
    if (sss.clas == '') {
      sss.clas = "menu-name-active";
      str += "[" + sss.id + "],"       //新增
    } else {
      sss.clas = "";
      var vstr = "[" + sss.id + "],"
      str = str.replace(vstr, '');    //替换空
    }

    //重写新的数据
    var strs = [];
    if (this.data.typeList != null) {
      strs = this.data.typeList
    }
    strs.splice(type, 1, sss); //移除在添加

    //赋值
    this.setData({
      typeList: strs,
      types: str
    })
  }
})

chooseType方法调用可看wxml中,可找到。复制上面代码,可自行测试。

— 新接触小程序,很多不熟练,这是自己写的方法,可能复杂了点,有大神有简单方法,留个言,一起研究。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值