uniapp 滚动尺

news/2025/2/21 15:32:08/

scale组件代码(部分class样式使用到了uview1.0的样式)

<template><view><view class="scale"><view class="pointer u-flex-col u-col-center"><u-icon name="arrow-down-fill" size="26" color="#33B4C2"></u-icon></view><view class="ruler"><scroll-view class="scroll" :scroll-x="true" :scrollLeft="scrollLeft" @scroll="scaleScroll"@touchstart="touchstart" @touchend="touchend"><view class="u-col-top" style="display: inline-flex;padding: 0 calc(50%);"><template v-for="(item,index) in scale"><view :class="['line',item%10==0?'int':(item%5==0?'middle':'')]":style="{width: `${width}rpx`}" ><view class="value" v-if="item%10==0"><text>{{item/10}}</text></view></view></template></view></scroll-view></view></view></view>
</template>
javascript"><script>export default {name: 'Scale',components: {},props: {value: {type: String,default: '0.0'},// 最小值min: {type: Number,default: 0,},// 最大值max: {type: Number,default: 100,},// 每个刻度宽度width: {type: Number,default: 10,},},data() {return {scrollLeft: 0,//left:0,//isScroll: true,//用户是否停止操作scrollTimer:null,manual:false,implement:false,//是否还在滚动};},computed: {scale() {//计算出标尺所有刻度let arr = [];for (let i = this.min*10; i <= this.max * 10; i++) {arr.push(i);}return arr;},widthPx(){//每个刻度宽度return uni.upx2px(this.width);}},created() {//数据回显let val = parseFloat(this.value);if(val<=this.min){this.$emit('input',this.min.toFixed(1))}else{this.scroll()}},methods: {//滚动scaleScroll(e) {if(!this.manual){return;}//还在滚动中this.implement = true;//获取滚动距离let scrollLeft = e.detail.scrollLeft;this.left = scrollLeft;//计算对应值let index = (scrollLeft / this.widthPx).toFixed(0);let value = (this.scale[parseInt(index)]/10).toFixed(1);this.$emit('input', value);//避免重复执行@scrollclearTimeout(this.scrollTimer);this.scrollTimer = setTimeout(()=>{//判断用户是否已经停止操作if(this.isScroll){this.scroll()}},300)},//开始滚动touchstart(e) {this.isScroll = false;this.manual = true;},//用户停止操作touchend(e) {this.isScroll = true;this.implement = false;//解决scaleScroll已经执行完,但标尺未吸附问题setTimeout(()=>{//判断是否还在滚动并且是否已经吸附if(this.left!=this.scrollLeft&&!this.implement){this.scroll()}},300)},//标尺吸附scroll(){//吸附时禁止执行@scaleScroll,防止一直滚动,数据异常this.manual = false;//计算滚动距离let index = this.scale.indexOf(parseInt(this.value*10));this.scrollLeft = index * this.widthPx;}},};
</script>
<style lang="scss" scoped>.scale {width: 100%;.pointer {position: relative;padding-bottom: 12rpx;&::after {position: absolute;z-index: 9;top: 38rpx;content: '';display: block;width: 4rpx;height: 78rpx;background: #33B4C2;}}.ruler {height: 114rpx;.scroll {height: 100%;width: 100%;::-webkit-scrollbar {width: 0;height: 0;color: transparent;}.line {position: relative;height: 36rpx;display: flex;flex-direction: column;align-items: center;&:last-child{width: 2rpx !important;}&::after {content: '';position: absolute;display: block;width: 2rpx;height: 100%;top: 0;left: 0;background: #C1E8ED;}.value {left: -23rpx;position: absolute;bottom: -48rpx;width: 46rpx;height: 36rpx;font-size: 26rpx;font-family: PingFang SC-Regular, PingFang SC;font-weight: 400;color: #C1C1C1;line-height: 36rpx;text-align: center;}}.int {height: 66rpx;}.middle {height: 50rpx;}}}}
</style>

使用方式

javascript">
<script>import Scale from '@/components/Scale/index.vue';export default {components: {Scale},data() {return {value:'10.0',}},}
</script>
<view class="value"><text>{{value}}</text></view><scale v-model="value" :width="16"></scale>
<style lang="scss">.value{padding: 36rpx 0 20rpx;font-size: 36rpx;font-family: PingFang SC-Regular, PingFang SC;font-weight: 400;color: #33B4C2;line-height: 50rpx;text-align: center;&::after{content: ' 公斤';height: 50rpx;font-size: 24rpx;font-family: PingFang SC-Regular, PingFang SC;font-weight: 400;color: #33B4C2;line-height: 50rpx;}}
</style>


http://www.ppmy.cn/news/1573597.html

相关文章

变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)

我遇到的业务问题实际上是RAG需要处理很多同一对象的日常报告&#xff0c;不像常识类问题&#xff0c;它的相关Document更多而且更分散&#xff0c;日常报告代表数据库里有很多它的内容&#xff0c;而且对象可能只在段落中的几句话提及到。top-k数量受限于大模型长度&#xff0…

AI全栈开发_人工智能AI大模型 Prompt提示词工程详解(全方位介绍及运用)

AI引领的第四次工业革命正席卷而来&#xff0c;如何精准把握这一历史性的机遇&#xff0c;将成为我们这一代人不容忽视且需深入思考与积极行动的重要课题。未来几年AI将会像计算机一样快速普及&#xff0c;面对这一历史性的第一波红利&#xff0c;你是否已准备好把握机遇&#…

火语言RPA--Excel打开文档

【组件功能】&#xff1a;打开已有或者新建Excel文档&#xff0c;并实例化初始化操作 配置预览 配置说明 Excel文件路径 支持T或# 默认FLOW输入项 新建或打开Excel文档文件路径。 打开方式 打开已有Excel&#xff1a;打开指定Excel文件到当前Excel对象 新建Excel&#xff…

HarmonyOS全栈开发指南:从入门到精通,构建万物智联的未来生态(四)

四、UI开发体系 16. ArkUI声明式语法与类Web开发范式 4.1.1 ArkUI简介 ArkUI是HarmonyOS提供的一套用于构建跨平台用户界面的声明式开发框架。它借鉴了现代前端框架的设计理念&#xff0c;通过声明式的方式描述UI界面&#xff0c;使得开发者可以更加专注于业务逻辑的实现&am…

DeepSeek R1与互联网医院的深度融合:金医慧通案例的创新实践与启示

一、引言 1.1 研究背景与意义 随着互联网技术的迅猛发展&#xff0c;互联网医院作为一种新型医疗服务模式&#xff0c;正逐渐改变着传统医疗行业的格局。自 2014 年国家卫生计生委发布《关于促进互联网医疗健康发展的指导意见》以来&#xff0c;互联网医院在政策支持下蓬勃发…

DeepSeek 云原生分布式部署的深度实践与疑难解析—— 从零到生产级落地的全链路避坑指南

一、云原生环境下的部署架构设计 1.1 典型架构拓扑 关键点&#xff1a;Master 节点需保证强一致性&#xff0c;Worker 节点需支持异构硬件调度。 1.2 配置模板陷阱 问题现象&#xff1a; 直接使用官方 Helm Chart 部署后出现 Pod 频繁重启 日志报错 ResourceQuota exceeded…

Oracle和MySQL的分页查询语句

在数据库系统中&#xff0c;特别是在Oracle和MySQL中&#xff0c;分页查询是一种常见需求&#xff0c;用于处理大量数据时只展示部分结果。下面分别介绍在Oracle和MySQL中实现分页查询的语句。 Oracle中的分页 在Oracle中&#xff0c;你可以使用ROWNUM或者FETCH FIRST和OFFSE…

cluster-smi 命令详解

cluster-smi 是一个用于管理和监控集群中 GPU 的命令行工具&#xff0c;通常用于显示集群中每个节点&#xff08;如 GPU 服务器&#xff09;上的 GPU 使用情况。该命令是类似于 nvidia-smi 的工具&#xff0c;但它支持在集群环境中对多个节点进行管理和监控。 使用 cluster-sm…