小程序单项选择以及自己遇到的坑(改变样式)——

直接贴代码:

既然是单选列表肯定用到列表循环了——

<!-- 这里使用了列表循环—— -->
<view class='money'>
  <block wx:for='{{arrays}}'>
    <view class='money_list' bindtap='tap' data-id='{{item.id}}'>
      <view class='money_box' style='background:{{item.background}}'>{{item.money}}</view>
    </view>
  </block>
</view>

这里是样式,并排两列输出

.money{
  position: relative;
  width:100%;
  height: auto;
  background: #ffffff;
}
.money_list{
  position: relative;
  width:50%;
  height: 50px;
  display: inline-block;
}
.money_box{
  position: absolute;
  width:80%;
  height:42px;
  background: #ffffff;
  border-radius: 4px;
  border: 1px #999999 solid;
  top:0;
  bottom:0;
  left:0;
  right:0;
  margin: auto;
  text-align: center;
  line-height: 42px;
}

里面简单的建立了两个函数一个清楚所有列表的样式——
另外一个是添加所选列表的样式——
注意里面的关键——
1、如果要改变data数组里面的属性需要这样做
|— var background = ‘arrays[’ + index + ‘].background’;
|— this.setData({
|— [background]: “#ffffff”,
|— })
2、获取当前点击的列表:(我这里使用的是id对应 wxml里面的data—id)
var id = event.currentTarget.dataset.id;
剩下的没什么了,看一看还是比较好理解的——

Page({

  /**
   * 页面的初始数据
   */
  data: {
    arrays: [{
        id: 0,
        money: "¥500",
        background: '',
      },
      {
        id: 1,
        money: "¥1000",
        background: '',
      },
      {
        id: 2,
        money: "¥5000",
        background: '',
      },
      {
        id: 3,
        money: "¥10000",
        background: '',
      },
    ],
  },


  // 清除样式函数-------
  myclear: function() {
    var list = this.data.arrays
    for (var i = 0; i < list.length; i++) {
      //  这个是声明data数组对象里面的索引对象
      var background = 'arrays[' + i + '].background';
      this.setData({
        [background]: "#ffffff",
      })
    }
    console.log("添加样式函数");
  },
  // 添加样式函数-------
  add: function(id) {
    var background = 'arrays[' + id + '].background';
    this.setData({
      [background]: "#00C140",
    })
    console.log("删除样式函数");
  },
  // 调用上面的两个函数
  myfunction: function(id) {
    this.myclear();
    this.add(id);
  },



  /**
   * 选择金额——————
   * 
   */
  tap: function(event) {
    var id = event.currentTarget.dataset.id;
    // console.log(id);
    switch (id) {
      case 0:
        console.log(id);
        this.myfunction(id);
        break;
      case 1:
        console.log(id);
        this.myfunction(id);
        break;
      case 2:
        console.log(id);
        this.myfunction(id);
        break;
      case 3:
        console.log(id);
        this.myfunction(id);
        break;
      default:
        console.log("选择错误");
    }
  },
})

简单的效果截图
效果基本上就是点击变换颜色——
/**
基本上这里就可以改变属性了,但是我还想改变里面数字的颜色,怎么办?
我第一想到的是在wxml属性里面再添加一个样式:
这样——style:‘background:{{item.background}},color{{item.color}}’
js里面进行相对应的声明字体颜色的属性,但是结果是失败了——我不知道为什么——或许属性不允许?!
然后我想是不是因为一个style里面不能声明两个item,于是我这样写:
style:’ {{item.style}}’
js里面arrays也进行相对应的更改:

arrays[
		{
		id:0,
		style:{
			background:''.
			color:'',
		}
	}
]

下面声明style调用对应属性
[style.background]
结果也是日了狗了——
还是不行——
但是我还想变换字体颜色,有变换背景颜色怎么办?
*/
**
其实很简单——既然他只让变换一个属性那就直接变换class就可以改了——
css里面写两个样式就好了——
**

+++++++++++++++++++++
+++++++++++++++++++++
+++++++++++++++++++++
+++++++++++++++++++++
+++++++++++++++++++++
+++++++++++++++++++++

从这里开始下面是新的——news——

wxml

<!-- 这里使用了列表循环—— -->
<view class='money'>
  <block wx:for='{{arrays}}'>
    <view class='money_list' bindtap='tap' data-id='{{item.id}}'>
      <view class='{{item.style}}'>{{item.money}}</view>
    </view>
  </block>
</view>

css 里面多了一个样式

.money{
  position: relative;
  width:100%;
  height: auto;
  background: #ffffff;
}
.money_list{
  position: relative;
  width:50%;
  height: 50px;
  display: inline-block;
}
.money_box{
  position: absolute;
  width:80%;
  height:42px;
  background: #ffffff;
  border-radius: 4px;
  border: 1px #999999 solid;
  top:0;
  bottom:0;
  left:0;
  right:0;
  margin: auto;
  text-align: center;
  line-height: 42px;
}
.money_box02{
  position: absolute;
  width:80%;
  height:42px;
  background: #00C140;
  color: #ffffff;
  border-radius: 4px;
  top:0;
  bottom:0;
  left:0;
  right:0;
  margin: auto;
  text-align: center;
  line-height: 42px;
}

js里面进行了简单的更改——

Page({

  /**
   * 页面的初始数据
   */
  data: {
    arrays: [{
        id: 0,
        money: "¥500",
        style:'money_box',
      },
      {
        id: 1,
        money: "¥1000",
        style: 'money_box',
      },
      {
        id: 2,
        money: "¥5000",
        style: 'money_box',
      },
      {
        id: 3,
        money: "¥10000",
        style: 'money_box',
      },
    ],
  },
  // 还原样式函数-------
  myclear: function() {
    var list = this.data.arrays
    for (var i = 0; i < list.length; i++) {
      //  这个是声明data数组对象里面的索引对象
      var style = 'arrays[' + i + '].style';
      this.setData({
        [style]: "money_box",
      })
    }
    console.log("添加样式函数");
  },
  // 添加样式函数-------
  add: function(id) {
    var style = 'arrays[' + id + '].style';
    this.setData({
      [style]: "money_box02",
    })
    console.log("删除样式函数");
  },
  // 调用上面的两个函数
  myfunction: function(id) {
    this.myclear();
    this.add(id);
  },
  /**
   * 选择金额——————
   * switch case 里面对应的选择第几项——
   */
  tap: function(event) {
    var id = event.currentTarget.dataset.id;
    // console.log(id);
    switch (id) {
      case 0:
        console.log(id);
        this.myfunction(id);
        break;
      case 1:
        console.log(id);
        this.myfunction(id);
        break;
      case 2:
        console.log(id);
        this.myfunction(id);
        break;
      case 3:
        console.log(id);
        this.myfunction(id);
        break;
      default:
        console.log("选择错误");
    }
  }
  })

在这里插入图片描述
这里改变了背景颜色,文字颜色,以及边框颜色

这里自己也是遇到了一个坑——
不过塞翁失马,焉知非福——
自己是绝对是记住了其中的原理——
也是把自己遇到的问题以及方法分享出来,大家可以举一反三,基本上单项选择ok了,
多项选择大家自己看着更改函数吧,自己写的应该算是清除了吧——

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序的自定义Picker选择器是一个内置组件,它可以方便地实现单项选择功能。使用自定义Picker选择器,用户可以从列表中选择一个选项,以便进行相关操作。 实现自定义Picker选择器的步骤如下: 1. 在所需页面的wxml文件中,添加Picker组件。例如,可以使用以下代码创建一个Picker选择器: ``` <view> <text>请选择:</text> <picker mode="selector" range="{{array}}" bindchange="bindPickerChange"> <view class="picker"> {{array[index]}} </view> </picker> </view> ``` 在上述代码中,`array` 是一个包含所有选项的数组,`index` 是选择项的下标。 2. 在对应页面的js文件中,对Picker组件的选择事件进行处理。通过`bindchange`绑定一个事件处理函数,当用户选择一个选项时,该函数会被触发。 ```javascript Page({ data: { array: ['选项1', '选项2', '选项3', '选项4'], index: 0 }, bindPickerChange: function(e) { this.setData({ index: e.detail.value }) } }) ``` 在上述代码中,`data` 对象中的 `array` 为选项数组,`index` 为当前选中的选项下标。通过 `bindPickerChange` 函数修改 `index` 可以实现选项的切换。 3. 根据Picker选择器的值进行相应操作。可以在 `bindPickerChange` 函数中添加逻辑,根据选择的选项值进行相应的处理操作,例如显示选中的选项、更新页面数据等。 通过以上步骤,就可以轻松地在微信小程序中实现自定义Picker选择器的单项选择功能。用户可以方便地从给定的选项列表中选择一个选项,以便进行后续操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值