微信小程序:自定义多选框样式,实现多选、全选功能,以及使用css实现选中打钩效果

这篇具有很好参考价值的文章主要介绍了微信小程序:自定义多选框样式,实现多选、全选功能,以及使用css实现选中打钩效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序 选择框,微信小程序,前端,javascript,小程序,css3文章来源地址https://www.toymoban.com/news/detail-715187.html

<scroll-view class="page-container" scroll-y="true" enable-back-to-top="{{true}}">
    //多选组
    <checkbox-group bindchange="checkboxChange">
      <view class="box" wx:for="{{records}}" wx:key="id">
        //使用label包裹多选框和自定义样式
        <label class="box-checkbox {{item.checked? 'is-checked':''}}">
          //隐藏原生多选框
          <checkbox value="{{item.id}}" hidden="{{true}}" checked="{{item.checked}}"/>
          //自定义多选框
          <view class="box-checkbox_icon"></view>
        </label>
        <view class="box-item">
           //...记录项内容
        </view>
      </view>
    </checkbox-group>
    
  </scroll-view>
 <!-- 底部固定卡片 -->
  <view class="fixedCard">
    <view class="fixedCard-text">
      <view class="fixedCard-text_allcheck">
        <checkbox-group bindchange="handleAllCheck" >
          <label class="box-checkbox {{allcheck? 'is-checked':''}}">
            <checkbox value="{{allcheck}}" hidden="{{true}}" checked="{{allcheck}}" />
            <view class="box-checkbox_icon"></view>
          </label>
        </checkbox-group>
        <view>全选</view>
      </view>
      <view>
      共<text class="fixedCard-text_highlight">{{totalOrder}}</text>个订单,<text class="fixedCard-text_highlight">{{totalMoney}}</text>元
      </view>
    </view>
    <view class="fixedCard-button" bind:tap="handleNextStep">下一步</view>
  </view>
//选择订单项
checkboxChange(e){
  const records = this.data.records   //获得当前页面全部记录集合
  let _allcheck=false  //假设未全选
  const values = e.detail.value    //当前已选择项的id集合,因为checkbox的value="{{item.id}}"
  const lenI = records.length
  const lenJ = values.length
  if(lenI==lenJ){    //全选,选中项集合长度和当前页面记录长度一致
    console.log("选择全部")
    records.forEach(x=>{
      x.checked=true
    })
    _allcheck=true  //标记全选
  }else{    //非全选
    for (let i = 0; i < lenI; ++i) {
      records[i].checked = false
      for (let j = 0; j < lenJ; ++j) {
        if (records[i].id ==  values[j]) {
          records[i].checked = true
          break
        }
      }
    }
  }
  //计算选中项数值总计
  this.countTotal(records.filter(x=> x.checked==true))

  this.setData({   //更新数据重新渲染页面
    allcheck:_allcheck,  
    records:records
  })
},
// 全选按钮
handleAllCheck(e){
  const records = this.data.records
  if(records.length==0){
    wx.showToast({
      title: '无订单',
      icon: 'none',
      duration: 1500
    })
    return
  }
  if(!this.data.allcheck){  //全选
    records.forEach(x=>{
      x.checked=true
    })
    this.countTotal(records)
  }else{  //取消全选,即全不选
    records.forEach(x=>{
      x.checked=false
    })
    this.countTotal([])
  }
  this.setData({
    allcheck:!this.data.allcheck,
    records:records
  })
},

//计算
countTotal(val){
  let money=0,order=0
  if(val.length!=0){
    orderorder=val.length
    val.forEach(x=>{
      money+=x.totalDeductionFee
    })
    //小数点第三位之后四舍五入
    money=Math.round(money * 100) / 100
  }
  this.setData({
    totalOrder:order,
    totalMoney:money
  })
},

//下一步
handleNextStep(){
  const orderIds=[]
  this.data.records.map(function(item){
    if(item.checked==true){orderIds.push(item.id)}
  })
  // console.log("已选订单id集合",orderIds)
  if(orderIds.length > 0){
    wx.navigateTo({
      url:`/pages/submitApply?orderIds=${orderIds}`
    })
  }else{
    wx.showToast({
      title: '请选择订单',
      icon: 'none',
      duration: 1500
    })
  }
},

box-checkbox{
  display: block;
  width: 38rpx;
  height: 38rpx;
  margin-right: 25rpx;
  border-radius: 50%;
  border: 2rpx solid #dadbda;
  background-color: #fff;
  position: relative;
  &_icon::after{//小勾
    box-sizing: content-box;
    content: "";
    border: 4rpx solid rgb(0, 0, 0);
    border-radius: 10rpx;
    border-left: 0;
    border-top: 0;
    height: 20rpx;
    width: 10rpx;
    left: calc(50% - 7rpx);
    top: calc(50% - 14rpx);
    position: absolute;
    transform: rotate(45deg) scaleY(0);
    transition: transform .05s ease-in .05s;
    transform-origin: center;
  }

  &.is-checked {  //选中样式
    background-color: #ffd900;
    .box-checkbox_icon::after {
      transform: rotate(45deg) scaleY(1);
    }
  }
}

到了这里,关于微信小程序:自定义多选框样式,实现多选、全选功能,以及使用css实现选中打钩效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序——实现单选、多选

    单选使用radio-group标签包裹radio标签 多选使用checkbox-group 标签包裹checkbox标签  单选和多选的wxml代码 以下是wxss代码

    2024年02月06日
    浏览(36)
  • 微信小程序自定义tabbar【中间凸起样式】

    效果预览 微信开发文档:自定义tabBar 一、配置信息 在 app.json 中的 tabBar 中指定 custom 字段为 true【允许使用自定义 tabBar】 在所有 tab 页 json 中申明usingComponents 项,或者在 app.json 中全局开启 在 list 中指定自己需要 tab 示例 二、添加 tabBar 代码文件 在代码根目录下添加custom-

    2024年02月10日
    浏览(33)
  • 微信小程序自定义tabbar导航栏,中间凸出样式

    这种样式的底部导航栏 使用微信小程序的自定义tabBar:微信小程序官方说明 uni.app=在  page.json   中的  tabBar  项指定  custom   字段为true: 在根目录创建custom-tab-bar目录, 注意一定要完全匹配,不要输错 :  index.js代码: 注意这里的中间需要凸出项设置一个class index.json代码

    2024年02月09日
    浏览(29)
  • 微信小程序怎么修改自定义组件中的样式

    在微信小程序中我们经常要用到自定义组件,但是有时我们因为引用的地方不同可能组件的一些样式也要修改,比如颜色,高度,宽度等来适合不同的页面,有没有办法来修改自定义组件中的样式呢,很显然是有的,我们要用到externalClasses方法。 一.自定义子组件: component

    2024年02月12日
    浏览(38)
  • placeholder样式自定义(uniapp 微信小程序、h5)

    一、使用uniapp开发 ①第一种方式:(写在行内) ②第二种方式: (给input加上placeholder-class属性,然后给该属性 设置一个类名,在style中设置样式。) 二、使用H5开发

    2024年02月09日
    浏览(28)
  • 【微信小程序】实现复选框chebox勾选验证

    功能展示  未选中点击按钮 选中点击按钮 实现逻辑 1. 获取checkbox的value值并绑定事件 2. 将获取到的value值与定义的数据关联 3. 当点击按钮是判断是否勾选,为true则验证通过,false则相反  代码实现 wxml js

    2024年02月07日
    浏览(28)
  • 微信小程序自定义字体样式、字体修改、第三方字体设置

     博主介绍: 本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮

    2024年02月04日
    浏览(49)
  • 微信小程序自定义主题颜色【状态栏tab样式同步更改】

     此功能使用js控制变量 调整颜色值,赋值给css颜色达到切换自定义颜色效果 1.创建公共样式userStyle.js文件,通过定义style1和style2来控制全局颜色改变。 注意:颜色值务必为十六进制,避免API不兼容颜色 2.在index.js中引入userColor并放入data中。 打印userColor     3.index.wxml中将变

    2024年02月03日
    浏览(34)
  • uniapp自定义radio的样式,适用于微信小程序

    uniapp内置组件是有官方定义的样式,下面如图所示。 但是注意一点: radio的默认颜色,在不同平台不一样。微信小程序是绿色的,抖音小程序为红色,其他平台是蓝色的。更改颜色使用color属性。 项目中需求的样式是不同于内置radio的 在这里打算自己写一个单选按钮,实现如

    2024年04月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包