WeChat アプレットでアイテムのクリック色の変更を実現するさまざまな方法

1: wxs は色を変更するための複数のアイテムのクリックを実装し、以前と同じ状態を維持します

レンダリング:

アイデア 1: for ループ レンダリング アイテム

           クリックした要素にアクティブなタグを追加します

           複数の要素は wxs 構文を使用して、アクティブなラベル配列内にクリックされたインデックスがあるかどうかを判断します。

                アイデア 2: 同時に色の変更が許可される要素が 1 つだけの場合、wxs を使用して { { utility.isActive(salaryState,index)}}を直接記述する必要はありません。

{ { state == インデックスに変更しますか ? 'アクティブ':' '}}

アイデア 3: 2 に基づいて一時的に色を変更するだけの場合は、WeChat: ホバー構文を使用します。

wxml:

<view class="salary">
    <van-row>
        <van-col span="23" offset="1">期待薪资<van-icon name="arrow-down" /></van-col>
    </van-row>
    <van-row class="tags">
      <van-col span="4" offset="{
   
   {index%4 == 0 ? 0 : 2}}" wx:for="{
   
   {job_salarys}}" wx:for-item="salary" wx:key="index">
        <view  class="tag {
   
   {utility.isActive(salaryState,index)}}"  data-key="{
   
   {index}}" bindtap="salaryActiveType">
          {
   
   {salary.dictLabel}}
        </view>
      </van-col>
    </van-row>
</view>

wxss:

.salary {
    margin-top: 40rpx;
    padding: 20rpx 40rpx;
}

.tag {
    text-align: center;
    width: 140rpx;
    height: 60rpx;
    line-height: 60rpx;
    margin: 20rpx 20rpx;
    font-size: 24rpx;
    color: #000000;
    background-color: #ffffff;
    border-radius: 14rpx;
    font-weight: bold;
  }

.active-tag {
    background-color: rgb(36, 0, 241);
}

 wxs:

 

<!-- 工具方法 -->
<wxs module="utility">
  function isActive(array,index) {
   if(array.indexOf(index)>-1) {
     return 'active-tag';
   }else {
     return '';
   }
  }

  module.exports.isActive = isActive;
</wxs>

js:

import {getDict} from '../../../../apis/dict';
Page({

    /**
     * 页面的初始数据
     */
    data: {
        job_salarys:[],
        salaryState: []
    },

    getDict(data) {
        getDict(data).then((res)=>{
            console.log(res);
            let that = this;
            if(res.code==200) {
            that.setData({
                job_salarys: res.data
            })
            }
        })
    },

    salaryActiveType(e) {
        let Nowstate = this.data.salaryState
        let key = e.currentTarget.dataset.key
        if (Nowstate.indexOf(key)>-1) {
            Nowstate.splice(Nowstate.indexOf(key), 1)
        }else {
            Nowstate.push(key);
        }
        
        this.setData({
            salaryState: Nowstate
        })
        console.log(this.data.salaryState);
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.getDict('job_salary');
    },

おすすめ

転載: blog.csdn.net/qq_65201988/article/details/129461092