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

news2024/9/24 11:25:34

请添加图片描述

wxml代码:

// 微信小程序的插值语法不支持直接使用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)

宽度:"width: {{(max-min)*6+1}}px;"

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

高度:"height: {{index%5===0?'20rpx':'12rpx'}};"

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

wxs代码:

module.exports.ceil = function (val) {
  return Math.ceil(val);
}

wxs模块文档

ts代码:

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代码:

.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;
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索软件项目管理的本质及概念

什么是软件项目管理&#xff1f; 软件项目管理是指对软件项目从规划、组织、指挥、控制到最终交付的全过程进行有效管理的一种方法。它通过合理的资源分配、有效的沟通和高效的协作&#xff0c;确保软件项目能够按照预定的目标、时间和质量要求完成。在现代信息技术逐渐普及和…

互联网企业内部FAQ的设计指南:帮助企业用户快速解决常见问题!

在互联网企业中&#xff0c;内部FAQ&#xff08;Frequently Asked Questions&#xff09;是帮助企业用户快速解决常见问题的重要工具。一个优秀的内部FAQ不仅可以提高用户满意度&#xff0c;还可以减轻客服团队的负担。本文将介绍互联网企业内部FAQ的设计指南&#xff0c;帮助企…

知识储备--基础算法篇-动态规划

1.前言 第一次接触动态规划&#xff0c;不知道具体什么意思&#xff0c;做了题才发现动态规划就是把大问题变成小问题&#xff0c;并解决了小问题重复计算的方法称为动态规划。比如上楼梯&#xff0c;一次上一阶或二阶&#xff0c;求有多少种算法&#xff0c;就可以拆成最后一…

Flutter 小技巧之 3.13 全新生命周期 AppLifecycleListener

Flutter 3.13 在 Framework 里添加了 AppLifecycleListener 用于监听应用生命周期变化&#xff0c;并响应退出应用的请求等支持&#xff0c;那它有什么特殊之处&#xff1f;和老的相比又有什么不同&#xff1f; 简单说&#xff0c;在 Flutter 3.13 之前&#xff0c;我们一般都…

计网第三章(数据链路层)(五)

目录 一、以太网交换机自学习和转发帧的过程 1.两层交换机和三层交换机 2.以太网交换机的基本原理 3.具体实现过程 一、以太网交换机自学习和转发帧的过程 1.两层交换机和三层交换机 大家可能注意到平常做题时有叫两层交换机&#xff0c;或者三层交换机的。 两层交换机就…

为什么需要websocket?

一、为什么需要websocket&#xff1f; 前端和后端的交互模式最常见的就是前端发数据请求&#xff0c;从后端拿到数据后展示到页面中。如果前端不做操作&#xff0c;后端不能主动向前端推送数据&#xff0c;这也是http协议的缺陷。 因此&#xff0c;一种新的通信协议应运而生---…

使用kabeja库解析DXF格式文件

DXF格式是一种开源的CAD文件格式&#xff0c;如何实现Java代码对齐的解析&#xff0c;在网上找了很久&#xff0c;也没有找到非常成熟的库。很奇怪&#xff0c;开源的格式&#xff0c;正常应该会有很多的库来支持。只找到了一个kabeja库&#xff0c;最新版本还是2008年出的0.4版…

GTK3实现自定义列表

使用gtk,如果想自己定义列表,思路可以将每个列表项作为一个hbox,整个列表是一个vbox。通过对容器动态的添加删除,实现列表操作,同时添加任何自己所需要的控件。 下面的例子是实现一个显示图片、按钮和进度条的列表,并且进行上移下移,具有添加和删除列表项功能但没有演示…

网站巡查与SEO:爱校对如何确保内容的最佳质量?

随着互联网的飞速发展&#xff0c;企业和个人正在寻找优化他们网站内容的最佳方式。在这个数字化时代&#xff0c;网站巡查和SEO已成为维持网站高度相关性和可见性的关键。此时&#xff0c;工具如“爱校对”不仅帮助检查文本的质量&#xff0c;还确保内容对搜索引擎优化&#x…

STM32使用定时器实现微秒(us)级延时

STM32使用定时器实现微秒&#xff08;us&#xff09;级延时 引言前期准备介绍系统时钟定时器时钟 项目项目介绍STM32CubeMX程序 引言 目前开发STM32普遍使用HAL库&#xff0c;但 HAL 库封装的延时函数目前仅支持 ms 级别的延时&#xff0c;日常很多情况下会用到 us 延时&#…

IC封装——从基本概念到TSV

一、IC封装 在之前文章中有大致提过封装&#xff0c;这里展开讲讲 芯片生产流程_沧海一升的博客-CSDN博客每个半导体产品的制造都需要数百个工艺&#xff0c;泛林集团将整个制造过程分为八个步骤&#xff1a;晶圆加工-氧化-光刻-刻蚀-薄膜沉积-互连-测试-封装。_芯片生产流程h…

spring异步框架使用教程

背景 在需求开发过程中&#xff0c;为了提升效率&#xff0c;很容易就会遇到需要使用多线程的场景。这个时候一般都会选择建一个线程池去专门用来进行某一类动作&#xff0c;这种任务到来的时候往往伴随着大量的线程被创建调用。而还有另外一种场景是整个任务的执行耗时比较长…

ElasticSearch 7.4学习记录(DSL语法)

上文和大家一起初次了解了很多ES相关的基础知识&#xff0c;本文的内容将会是实际企业中所需要的吗&#xff0c;也是我们需要熟练应用的内容。 面对ES&#xff0c;我们最多使用的就是查询&#xff0c;当我负责这个业务时&#xff0c;现不需要我去考虑如何创建索引&#xff0c;添…

ubuntu18.04安装keil5(踩坑)看完再享用,别直接上手

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装winewine的总结 二、安装Keil5总结 前言 切记看完再享用&#xff0c;别直接上手&#xff0c;不然安装的时候会和我一样踩坑的&#xff08;走了很多弯路…

Unity之用Transform 数组加多个空物体-->简单地控制物体按照指定路线自动行驶

文章目录 **原理解释**&#xff1a;**带注释的代码**&#xff1a;实际运用 当你需要实现物体按照指定路线行驶时&#xff0c;你可以通过以下步骤来实现&#xff1a; 原理解释&#xff1a; 路径点&#xff1a;你需要定义一系列路径点&#xff0c;这些点将构成物体行驶的路线。每…

[软件工具]精灵标注助手目标检测数据集格式转VOC或者yolo

有时候我们拿到一个数据集发现是xml文件格式如下&#xff1a; <?xml version"1.0" ?> <doc><path>C:\Users\Administrator\Desktop\test\000000000074.jpg</path><outputs><object><item><name>dog</name>…

纷享销客连接型CRM助力中国企业全球业务增长

近年来&#xff0c;中国企业出海热度越来越高&#xff0c;中国企业出海之路也越走越宽&#xff0c;全球化步伐明显加速。2023年&#xff0c;中国企业业务出海正进入快车道和分水岭阶段&#xff0c;中国也正在从一个世界工厂变成全球资源的整合者。 0 中国企业出海&#xff0c…

精简体积的OLED 基础驱动库 - OLED_BASIC

打算用一个存储空间不大的Arduino 芯片做点简单的文字和图形显示&#xff0c;屏幕芯片SSD1316&#xff0c;感觉u8g2 占用还是太大&#xff0c;想裁剪别人的现成代码又感觉无从下手&#xff0c;所以就基本上重写了一个OLED 显示库&#xff0c;仓库地址&#xff1a;gitee.com/etb…

SQL助你面大厂(Join家族介绍)

在学习SQL时候&#xff0c;在多表查询的时候你肯定使用过Join&#xff0c;无非就是把两表联合在一起进行多表查询&#xff0c;但是你是真的了解它们的用法么&#xff1f; Join家族一般有left Join、Rigth Join、Inner Join、Left Semi Join、Left Anti Join、Full Join为主 C…

补充1 MATLAB_GUI_修改普通按钮(PushButton)的参数创建一个长按回调按钮

目录 一、实例效果二、补充的知识点&#xff08;两种回调函数&#xff09;三、步骤  1. 先建一个空白的GUI。  2.在GUI Figure 上添加一个按钮&#xff08;PushButton&#xff09;组件&#xff0c;并设置其属性&#xff0c;例如位置、大小和文本等。  3.CtrS保存一下GUI。…