微信小程序,封装身高体重选择器组件

wxml代码:

javascript 复制代码
// 微信小程序的插值语法不支持直接使用Math
<wxs src="./ruler.wxs" module="math"></wxs>
<view class="ruler-container">
  <scroll-view scroll-left="{{scrollLeft}}" enhanced="{{true}}" bounces="{{false}}" scroll-x="true" class="scroll-box" bindscroll="scroll">
  	// 刻度
    <view class="ruler" style="width: {{(max-min)*6+1}}px;">
      <view wx:for="{{(max-min)+1}}" wx:key="item" style="display: flex;" class="scale" style="height: {{index%5===0?'20rpx':'12rpx'}};"></view>
    </view>
    // 刻度值
    <view class="scale-value" style="width: {{(max-min)*6}}px;">
      <view class="zero">{{min}}</view>
      <view class="scale-value-item" wx:for="{{math.ceil((max-min)/10)}}" wx:key="item">{{(index+1)*10+min}}</view>
    </view>
  </scroll-view>
  <view class="value-box">
    <text>{{value}}{{unit}}</text>
    <view class="line"></view>
  </view>
</view>

scrollLeft 保证能选择到最小值和最大值
bounces 关闭ios的回弹效果,回弹之前会有显示复数和大于最大值的情况(也可以不关闭,设置例如:min = val<min?min:val)

javascript 复制代码
宽度:"width: {{(max-min)*6+1}}px;"

6:间隔+刻度的宽度
+1 是额外加一个刻度,这样才完整。

javascript 复制代码
高度:"height: {{index%5===0?'20rpx':'12rpx'}};"

index%5===0: 5的倍数为长刻度,否则为短刻度

wxs代码:

javascript 复制代码
module.exports.ceil = function (val) {
  return Math.ceil(val);
}

wxs模块文档

ts代码:

javascript 复制代码
Component({
  properties: {
    min: {
      type: Number,
      value: 0
    },
    max: {
      type: Number,
      value: 100
    },
    unit: {
      type: String,
      value: '单位'
    },
    defaultValue: {
      type: Number,
      value: 0
    },
    setvalue:Function
  },
  data: {
    value: 0,
    cache: 0,
    scrollLeft: 0
  },
  onShow() {
    const value = this.properties.defaultValue
    this.setData({
      value,
      scrollLeft: value * 6
    })
  },
  attached() {
    const { defaultValue, min } = this.properties
    setTimeout(() => {
      this.setData({
        value: defaultValue,
        scrollLeft: (defaultValue - min) * 6
      })
    }, 100);
  },
  methods: {
    scroll: function (e: WechatMiniprogram.TouchEvent) {
      const scrollLeft = e.detail.scrollLeft + 1
      let value = Math.ceil(scrollLeft / 6)
      value = value ? value - 1 : value
      if (value % 10 === 0 && Math.floor(value / 10) !== this.data.cache) {
        wx.vibrateShort({ type: 'light' })
        this.setData({
          cache: Math.floor(value / 10)
        })
      }
      this.setData({
        value: value + this.properties.min
      })
      this.triggerEvent('setvalue',value + this.properties.min)
    }
  }
})

参数:

min:刻度最小值

max:刻度最大值

unit:单位

defaultValue:初始值

setvalue:自定义方法

css代码:

javascript 复制代码
.ruler-container {
  position: relative;
  background: #FBFBFB;
  border-radius: 8rpx;

  .value-box {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    top: 0;
    height: 70rpx;
    z-index: 99999999;
    width: 100rpx;
    display: flex;
    flex-direction: column;
    align-items: center;
    color: #46D2A1;
    font-size: 28rpx;
    line-height: 40rpx;
    padding-top: 8rpx;

    .line {
      width: 2px;
      height: 28rpx;
      background: #46D2A1;
    }
  }
}

.scroll-box {
  height: 122rpx;
}

.ruler {
  display: flex;
  align-items: flex-end;
  margin-top: 50rpx;
  padding: 0 50%;

  .scale {
    width: 1px;
    background-color: #C2C2C2;
    margin-right: 5px;
    &:last-child{
      margin-right: 0;
    }
  }
}

.scale-value {
  display: flex;
  padding: 0 50%;
  position: relative;
  overflow: hidden;
  .scale-value-item {
    color: #C2C2C2;
    font-size: 22rpx;
    width: 60px;
    line-height: 32rpx;
    text-align: center;
    &:last-child{
      width: 30px;
      transform: translateX(50%);
    }
  }
  .zero{
    width: 30px;
    color: #C2C2C2;
    font-size: 22rpx;
    line-height: 32rpx;
    transform: translateX(-50%);
    text-align: center;
  }
}
相关推荐
AI品信智慧数智人2 小时前
文旅景区小程序集成数字人智能语音交互系统,山东品信解锁AI伴游新玩法✨
人工智能·小程序
医疗信息化王工3 小时前
钉钉小程序开发实战:投诉管理系统
小程序·钉钉·开发·投诉管理
灵机一物6 小时前
灵机一物AI原生电商小程序(已上线)-从“48 小时失联”到“长期可触达”:一套小程序公众号关注引导 + 订阅消息授权的产品化设计
小程序
碎像6 小时前
掌握uniapp发布微信小程序、App(Android)
微信小程序·小程序·uni-app
宠友信息6 小时前
社交软件源码哪个渠道好
java·微服务·架构·社交电子·springboot·uniapp
程序媛徐师姐7 小时前
Java基于SSM的实验室管理微信小程序,附源码+文档说明
java·微信小程序·实验室管理·实验室管理微信小程序·java实验室管理微信小程序·java实验室管理小程序·实验室管理小程序
CHU7290351 天前
生鲜团购商城小程序:新鲜触手可及的便捷购物新体验
小程序
医疗信息化王工1 天前
钉钉小程序开发实战:手术查询小程序
小程序·钉钉·手术查询
Fate_I_C1 天前
uniappx 鸿蒙运行包制作失败
华为·uni-app·uniapp·harmonyos
软件开发技术1 天前
新版点微同城主题源码34.7+全套插件+小程序前后端 源文件
小程序·php