想要做一个基于uni-app的血糖血压刻度滑动控件,hbuilder市场没有好的,参照别人的写了一个。如图:

源码,自己放入components里面。

<!-- 刻度滑动选择 -->
<template><view><view class="slide-title"><view class="slide-title-left">{{subTitle}}</view><view class="slide-title-num">{{selvalue}}</view><view class="slide-title-right">{{subUnit}}</view></view><view class="slide-scroll-border"><scroll-view scroll-x class="slide-scroll" :enable-flex="true" show-scrollbar="false":style="{width: setUnit(screenW)}" @scroll="slideScroll":scroll-left="scrollLeft" @touchend="slideMoveEnd" :scroll-with-animation="true"><view class="slide-scroll slide-border"><view class="empty-none" :style="{width: screenW /2 + 'px'}"></view><view v-for="(s_item, s_index) in list" :key="s_index" class="" :class="{'slide-list':true,'selected': s_index === selInd,'selected1': (s_index === selInd + 1 || s_index === selInd - 1),'selected2': (s_index === selInd + 2 || s_index === selInd - 2),'selected3': (s_index === selInd + 3 || s_index === selInd - 3) }"><view class="list-num" v-if="s_index%10==0">{{s_item}}</view><view class="slide-list-ba"></view></view><view class="empty-none" :style="{width: screenW / 2 + 'px'}"></view></view></scroll-view></view><view class="slide-message" v-if="message">{{message}}</view></view>
</template><script>export default {name:'zlSlider',data() {return {scrollLeft: 0, // 仅用于核准中间位置d_len:20,list: [],selvalue:0,selInd: 0,cellWidth:12,// 每小格宽度screenW:uni.getSystemInfoSync().screenWidth};},props: {subTitle: 	{	type: String,	default: '' },subUnit: 	{	type: String,	default: '' },message: 	{	type: String,	default: '' },startNum: 	{	type: Number,	default: 0 },	// 开始数值endNum: 	{	type: Number,	default: 20 },	// 结束数值step: 		{	type: Number,	default: 1 },	// 结束数值value: 		{	type: Number,	default: 0 },	// 用v-model双向绑定},mounted() {// 获取滑动显示内容的宽度。uni.createSelectorQuery().in(this).select('.slide-scroll-border').boundingClientRect(data => {if (data) this.screenW = data.width-60;}).exec();this.initSlide();},methods: {setUnit(unit) {if (typeof unit === 'number') {return (unit + 'px')} else {return unit;}},// 滚动触发slideScroll(e) {const { cellWidth} = this;const scrollL = e.detail.scrollLeft; // 当前滚动距离左边的距离let ind = parseInt(scrollL / cellWidth); // 当前选中是第几个if (ind > this.d_len) {ind = this.d_len;}if (ind !== this.selInd) {this.selInd = ind;this.selvalue = this.getIntNum(this.selInd*this.step+this.startNum)}},// 触摸结束slideMoveEnd(e) {// const end_t = setTimeout(() => {// 	const { selInd } = this;// 	this.slideTo(selInd);// 	this.setEmitFunc();// 	clearTimeout(end_t);// }, 400);const { selInd } = this;this.slideTo(selInd);this.setEmitFunc();},// 初始化initSlide() {const { startNum, endNum, step } = this;this.d_len = (endNum - startNum)*(1/step);// let list = [...Array(this.d_len).keys()].map(index=>this.getIntNum(startNum + index*this.step))// for (let i = 0; i <= this.d_len; i++) {// 	const l_num = this.getIntNum(startNum + i*this.step);// 	list.push(l_num);// }this.list = [...Array(this.d_len).keys()].map(index=>this.getIntNum(startNum + index*step));this.getSelInd();},// 滚动到正确的刻度slideTo(ind) {const { screenW, cellWidth, scrollLeft } = this;const newLeft = ind * cellWidth + (cellWidth / 2);this.$nextTick(()=>{this.scrollLeft = (scrollLeft === newLeft) ? (scrollLeft + 0.001) : newLeft;})},// 四舍五入getIntNum(n) {return parseInt(n * 100) / 100},// value改变后,计算选中的selIndgetSelInd() {const { endNum, startNum } = this;let value = this.value,isChange = false,noHave = false;// 不能超过最小最大值if (value > endNum) {value = endNum;isChange = true;} else if (value < startNum) {value = startNum;isChange = true;}let defaultInd = -1;const itemValue = this.list.map((item,index)=>{return (item===value)? index :0}).filter(item=>item>0);// for (let d = 0; d <= this.d_len; d++) {// 	const item = this.getIntNum(startNum + d*this.step);// 	if (item === value) {// 		defaultInd = d;// 		break;// 	}// }if(itemValue && itemValue.length>0){defaultInd = itemValue[0]}else {defaultInd = 0;noHave = true;}// 没有匹配到的情况 以及 超过了最大最小值 需要通知父组件修改value(isChange || noHave) && this.setEmitFunc();if (defaultInd === this.selInd) return;this.selInd = defaultInd;this.selvalue = this.getIntNum(this.selInd*this.step+this.startNum)this.slideTo(defaultInd);},// 父组件通知事件setEmitFunc() {const { selvalue } = this;this.$emit('input', selvalue);this.$listeners.change && this.$emit('change', selvalue);},},watch: {value: function(newVal, oldVal) {this.getSelInd();}},}
</script><style lang="scss">.slide-title{display: flex;flex-direction: row;align-items: flex-end;justify-content: center;margin-top: 10px;margin-bottom: 5px;&-left,&-right{color:$uni-text-color-grey;font-size: 14px;}&-num{color:$uni-text-color;text-align: center;font-size: 30px;margin: 0 10px;line-height: 100%;/* #ifdef H5 */margin-bottom: 5px !important;/* #endif */}}.slide-message{color:$uni-text-color-grey;font-size: $uni-font-size-sm;margin: 0 20px;}.slide-scroll {display: flex;flex-wrap: nowrap;flex-direction: row;height: 50px;::-webkit-scrollbar {width: 0 !important;height: 0 !important;-webkit-appearance: none;background: transparent;color: transparent;}}.slide-scroll-border{padding: 5px 30px;border: 1px solid #808080;border-radius: 40px;overflow: hidden;}.slide-list {flex-shrink: 0;position: relative;border-radius: 4px;transition: background-color .1s;width:4px;margin: 0 4px;height: 50px;}.slide-list.selected .slide-list-ba{background-color: red !important;height: 27px;}.slide-list.selected1 .slide-list-ba{background-color: red !important;height: 24px;}.slide-list.selected2 .slide-list-ba{background-color: red !important;height: 21px;}.slide-list.selected3 .slide-list-ba{background-color: red !important;height: 18px;}.slide-list-ba{position: absolute;bottom: 0;left: 0;right: 0;height: 15px;background-color: #D3D3D3;}.list-num {top: 0;position: absolute;transform: translateX(-50%);}.empty-none {flex-shrink: 0;height: 5px;}
</style>

使用示例

<template><view>
......
<zl-slider v-model="bloodSugar.value" :step="0.1" :startNum="0" :endNum="50" subTitle="血糖" subUnit="mmol/L" message="范围通常>3.9,空腹<7.0, 饭后两小时内<11.1 mmol/L"></zl-slider>
......</view>
</template>
<script>import zlSlider from '@/components/zl-slider/zl-slider.vue';export default {components:{zlSlider},data() {return {bloodSugar:{value:0}}}}
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言(02)——标准库函数大全(持续更新)

想要了解更多的C语言知识&#xff0c;可以订阅下面的专栏&#xff0c;里面也有很多品质好文&#xff1a; 打怪升级之路——C语言之路_ankleless的博客-CSDN博客 还在持续更新中&#xff0c;以下是学习过程中遇到的一些库函数&#xff08;排序不分先后&#xff09;&#xff1a…

永磁同步电机无速度算法--静态补偿电压模型Harnefors观测器

一、原理介绍本文基于Harnefors教授提出的静态补偿电压模型&#xff0c;可以实现带载零速启动、正反转切换等功能&#xff0c;原理清晰&#xff0c;实现简便。二、仿真模型在MATLAB/simulink里面验证所提算法&#xff0c;搭建仿真。采用和实验中一致的控制周期1e-4&#xff0c;…

[SKE]Python gmssl库的C绑定

Python gmssl库的C绑定 摘要:本文展示gmssl库的C绑定,并给出完整代码。将参考模型从Python脚本迁移到纯C代码中使用gmssl库(TongSuo项目,支持国密算法如SM4,同时兼容AES、DES、3DES、RSA等)。这样,UVM(SystemVerilog)可以通过DPI-C直接调用C函数,而无需嵌入Py…

4.方法的使用

方法是指一段具有独立功能的代码块&#xff0c;只有被调用时才会执行方法的主要作用体现在&#xff1a;代码组织&#xff1a;将原本挤在一起的臃肿代码按照功能进行分类管理例如&#xff1a;将用户注册的验证逻辑、数据库操作、结果返回等分离成不同方法提高复用性&#xff1a;…

day21-Excel文件解析

目录 1. 概述 2. Apache POI 3. XSSF解析Excel文件 3.1. 添加Jar包依赖 3.2. Workbook&#xff08;Excel文件&#xff09; 3.2.2. 加载&#xff08;解析&#xff09;Excel文件 3.3. Sheet &#xff08;工作簿&#xff09; 3.3.1. 创建工作簿 3.3.2. 获取工作簿 3.3.3.…

与 TRON (波场) 区块链进行交互的命令行工具 (CLI): tstroncli

源码仓库 一个基于 Node.js 和 TypeScript 构建的&#xff0c;用于与 TRON (波场) 区块链进行交互的命令行工具 (CLI)。 本项目旨在提供一个简单、可扩展的框架&#xff0c;让开发者可以轻松地通过命令行调用 TRON 的 HTTP API&#xff0c;实现查询链上信息、发送交易等操作。…

rabbitmq--默认模式(点对点)

导入包&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency>application.yml springrabbitmq:host: localhostport: 5672username: guestpassword: gue…

外网访问文档编辑器Docsify(Windows版本),内网穿透技术应用简便方法

如果你正在为项目写文档&#xff0c;但又不想折腾复杂的构建流程&#xff0c;也不想维护一堆静态 HTML 文件&#xff0c;那你一定要试试 docsify。docsify 是一个基于 JavaScript 的开源文档生成工具&#xff0c;它最大的特点就是“无构建”&#xff1a;你只需要写 Markdown 文…

第4章唯一ID生成器——4.5 美团点评开源方案Leaf

Leaf是美团点评公司基础研发平台推出的一个唯一ID生成器服务&#xff0c;其具备高可靠性、低延迟、全局唯一等特点&#xff0c;目前已经被广泛应用于美团金融、美团外卖、美团酒旅等多个部门。Leaf根据不同业务的需求分别实现了Leaf-segment和Leaf-snowflake两种方案&#xff0…

分布式搜索和分析引擎Elasticsearch实战指南

ES 介绍与安装 Elasticsearch&#xff0c; 简称 ES&#xff0c;它是个开源分布式搜索引擎&#xff0c;它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c;自动发现&#xff0c;索引自动分片&#xff0c;索引副本机制&#xff0c;restful 风格接口&#xff0c;多数据源…

【13】C# 窗体应用WinForm——.NET Framework、WinForm、工程创建、工具箱简介、窗体属性及创建

文章目录1. WinForm工程创建 及 界面介绍1.1 WinForm工程创建1.2 窗体 Form1.cs “查看代码”1.3 打开窗体设计器2. 工具箱3. 窗体属性及创建3.1 窗体属性3.2 实例&#xff1a;创建一个新窗体3.2.1 添加新Windows窗体3.2.2 窗体属性配置3.2.3 设置该窗体为启动窗体WinForm 是 W…

论文阅读-IGEV

文章目录1 概述2 模块2.1 总体说明2.2 特征抽取器2.3 CGEV2.4 基于Conv-GRU的更新算子2.5 空间上采样2.6 损失函数3 效果参考文献1 概述 在双目深度估计中&#xff0c;有一类是基于3D卷积的方法&#xff0c;代表就是PSMNet&#xff0c;它应用 3D 卷积编码器-解码器来聚合和正则…

[2025CVPR-图象分类方向]SPARC:用于视觉语言模型中零样本多标签识别的分数提示和自适应融合

1. ​背景与问题定义​ 视觉语言模型&#xff08;如CLIP&#xff09;在单标签识别中表现出色&#xff0c;但在零样本多标签识别&#xff08;MLR&#xff09;任务中表现不佳。MLR要求模型识别图像中多个对象&#xff08;例如&#xff0c;图像包含“猫”和“沙发”&#xff09;&…

2025创始人IP如何破局?

内容持续更新却无人点赞&#xff0c;课程精心打磨却无人报名&#xff0c;直播卖力讲解却无人停留 —— 明明有内容、有经验、有成果&#xff0c;却始终难以打动用户。问题的核心&#xff0c;或许在于你尚未打造出真正的 “创始人IP”。‌一、创始人IP&#xff1a;不止标签&…

告别配置混乱!Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践

一、Spring配置文件 1.1、什么是Spring配置 Spring配置指的是在Spring框架中定义和管理应用程序组件&#xff08;如Bean&#xff09;及其依赖关系的过程 作用&#xff1a; 配置文件主要用于解决硬编码问题&#xff0c;它将可能变更的信息集中存放。程序启动时&#xff0c;会从…

无人机喷洒系统技术要点与难点解析

一、 模块运行方式1. 任务规划与加载模块&#xff1a;输入&#xff1a;农田边界、障碍物信息、作物类型、病虫害信息、所需喷洒量、天气条件。运行&#xff1a;利用地面站软件或移动APP&#xff0c;规划最优飞行路径&#xff0c;设定飞行高度、速度、喷洒参数、作业区域。将规…

mongodb源代码分析createCollection命令创建Collection流程分析

MongoDB 提供两种方式创建集合&#xff1a;隐式创建 和 显式创建。方式 1&#xff1a;隐式创建&#xff08;推荐&#xff09;当你向不存在的集合中插入文档时&#xff0c;MongoDB 会自动创建该集合。示例在 db中隐式创建 users 集合&#xff1a;javascriptdb.users.insertOne({…

c++注意点(13)----设计模式(抽象工厂)

创建型模式抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供一个接口&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们具体的类。简单说&#xff0c;它就像一个 "超级工厂"&#xff…

【大语言模型入门】—— Transformer 如何工作:Transformer 架构的详细探索

Transformer 如何工作&#xff1a;Transformer 架构的详细探索Transformer 如何工作&#xff1a;Transformer 架构的详细探索什么是 Transformer&#xff1f;什么是 Transformer 模型&#xff1f;历史背景从 RNN 模型&#xff08;如 LSTM&#xff09;到 Transformer 模型在 NLP…

iOS安全和逆向系列教程 第20篇:Objective-C运行时机制深度解析与Hook技术

iOS安全和逆向系列教程 第20篇:Objective-C运行时机制深度解析与Hook技术 引言 在上一篇文章中,我们深入学习了ARM64汇编语言的基础知识,掌握了从寄存器操作到指令分析的完整技能体系。现在,我们将把这些底层知识与iOS应用的高层逻辑联系起来,深入探讨Objective-C运行时…