可以动态改变刻度背景色的车速仪表盘

最近做的项目的主页面需要用到一个仪表盘来动态显示车速,同时改变对应的背景色

仪表盘

开始是想着使用echarts,修修改改拿来用,但是人家客户有规定,必须搞个差不多的,那没办法,自
己动手搞个吧
截图如下:
这是人家的
在这里插入图片描述
这是我搞出来的
在这里插入图片描述
这样看着似乎差不多了哈,客户没提啥意见,搞定
接下来是代码,考虑到代码的复用性,封装成了件,及引入的方法,因为要适配不同电脑的分辨率,所以使用了把px根据比例全部换成了rem,这里的1rem=80px,若是不想使用rem,可以把数值乘以80,然后把rem换成px就可以了

代码思路
首先是让UI小伙伴扣了两张图
yibiao5.png
在这里插入图片描述
yibiaoBoot.png
在这里插入图片描述
1.然后根据找好最外层的父级,根据定位把图片和文字的位置搞个差不多;
2.接着就是刻度了,可以看到刻度是有两层的,外面有一层,里面有一层,这些刻度我想着前端动态生成,然后给这些刻度设置一个默认背景色,然后我就可以通过style样式控制背景色,我看了原图上面的刻度是64个,然后底部有16个是不变色的,被遮罩住了,所以通过css3的旋转,改变下角度,然后只控制其余48个刻度即可,
3.因为最大的速度是200,所以根据200/48即可得出,1速度等于多少个刻度
封装仪表盘组件
代码如下

<template><div class="data-left-1"><div class="box_style"><div class="mybox_wrap"><div class="yibiao_style"><div class="clock_box"><div class="clock_dial"></div><div class="clock_dial2"></div></div><div class="yibiao_boot"></div><div class="yibiao_speed">{{ carSpeed }}</div><div class="yibiao_span">速度(km/h)</div><div class="yibiao_max">200</div></div></div></div></div>
</template>
<script>
export default {props: {isShow: {type: Boolean,default: true,},speed: {type: Number,default: 0,},rate: {default: 0,},},data() {return {carSpeed: 0, //列车速度showTabulation: true,}},computed: {},mounted() {let clock_dial = document.querySelector('.clock_dial')let clock_dial2 = document.querySelector('.clock_dial2')//1 制作表盘for (let i = 0; i < 64; i++) {var div = document.createElement('div')div.setAttribute('class', 'dial')div.innerHTML = '<span></span>'clock_dial.appendChild(div)}let dial = document.querySelectorAll('.dial')for (let i = 0; i < dial.length; i++) {dial[i].style.position = 'absolute'dial[i].style.width = '0.125rem'dial[i].style.height = '100%'dial[i].style.top = '0'dial[i].style.left = '0.625rem'}let dialSpan = document.querySelectorAll('.dial span')for (let i = 0; i < dialSpan.length; i++) {dialSpan[i].style.width = '0.05rem'dialSpan[i].style.height = '0.125rem'dialSpan[i].style.background = '#699B9A';dialSpan[i].style.backgroundImage = ''dialSpan[i].style.display = 'inline-block'dialSpan[i].style.verticalAlign = 'top'dialSpan[i].style.borderRadius = '0.0125rem'}for (let i = 0; i < 64; i++) {var div = document.createElement('div')div.setAttribute('class', 'dial2')div.innerHTML = '<span></span>'clock_dial2.appendChild(div)}let dial2 = document.querySelectorAll('.dial2')for (let i = 0; i < dial2.length; i++) {dial2[i].style.position = 'absolute'dial2[i].style.width = '0.125rem'dial2[i].style.height = '100%'dial2[i].style.top = '0'dial2[i].style.left = '0.5rem'}let dialSpan2 = document.querySelectorAll('.dial2 span')for (let i = 0; i < dialSpan2.length; i++) {dialSpan2[i].style.width = '0.0375rem'dialSpan2[i].style.height = '0.0625rem'dialSpan2[i].style.background = '#699B9A'dialSpan2[i].style.backgroundImage = ''dialSpan2[i].style.display = 'inline-block'dialSpan2[i].style.verticalAlign = 'top'dialSpan2[i].style.borderRadius = '0.0125rem'}for (let i = 0; i < dial.length; i++) {var angle = (360 / 64) * idial[i].style.transform = 'rotate(' + angle + 'deg)'dial2[i].style.transform = 'rotate(' + angle + 'deg)'}},methods: {},watch: {speed(val) {this.carSpeed = vallet basicParam = 200 / 48;let dialSpan = document.querySelectorAll('.dial span')let dialSpan2 = document.querySelectorAll('.dial2 span')let actNum = Math.ceil(this.carSpeed / basicParam);for(let m=0;m<48;m++){dialSpan[m].style.background = "#699B9A";dialSpan2[m].style.background = "#699B9A";}if (this.carSpeed > 0&&this.carSpeed <100) {for (let i = 0; i < actNum; i++) {dialSpan[i].style.background = "#43EDEA"dialSpan2[i].style.background = "#43EDEA"}}else{for (let i = 0; i < 24; i++) {dialSpan[i].style.backgroundImage = "linear-gradient(to right,#43EDEA,#359EC7)"dialSpan2[i].style.backgroundImage = "linear-gradient(to right,#43EDEA,#359EC7)"}for (let j = 24; j< actNum; j++) {dialSpan[j].style.backgroundImage = "linear-gradient(to right,#359EC7,#3B87F3)"dialSpan2[j].style.backgroundImage = "linear-gradient(to right,#359EC7,#3B87F3)"}}},isShow(val) {console.log(val)this.showTabulation = val},},
}
</script>
<style scoped lang="less">
//字体资源,若是没有的话,可以去掉这行代码
//@font-face {
//  font-family: 'son';
//  src: url('~@/assets/font/son.ttf') format('truetype');
//}.yibiao_speed {position: absolute;left: 34%;top: 37%;font-size: 0.375rem;width: 0.75rem;height: 0.45rem;text-align: center;
}
.yibiao_span {position: absolute;left: 22%;top: 72%;font-size: 0.175rem;width: 1.3rem;height: 0.45rem;text-align: center;z-index: 1000;
}
.yibiao_max {position: absolute;left: 66%;top: 63%;font-size: 0.225rem;width: 0.75rem;height: 0.45rem;text-align: center;
}.yibiao_style {width: 2.25rem;height: 2.25rem;background-image: url(~@/assets/3d2/yibiao5.png);background-size: cover;position: relative;color: #fff;
}
.data-left-1 {width: 100%;height: 2.375rem;// padding: 0.1rem;display: flex;box-sizing: border-box;box-sizing: border-box;justify-content: center;// align-items: center;margin-bottom: 0.0625rem;
}
.mybox_wrap {width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;
}.box_style {width: 2.25rem;height: 2.25rem;
}
.clock_box {width: 1.4375rem;height: 1.4375rem;border-radius: 50%;position: absolute;left: 0.375rem;top: 0.375rem;
}.clock_dial,
.clock_dial2 {width: 100%;height: 100%;position: relative;-moz-transform-origin: center center;-webkit-transform-origin: center center;-o-transform-origin: center center;transform-origin: center center;text-align: center;transform: rotate(-132deg);
}.clock_dial2 {width: 1.0625rem;height: 1.0625rem;top: 0.2375rem;left: 0.2375rem;;transform: rotate(-132deg);position: absolute;
}
.clock_dial div {position: absolute;width: 0.125rem;height: 100%;top: 0;left: 0.625rem;
}.dial,
.dial2 {position: absolute;width: 0.125rem;height: 100%;top: 0;left: 0.625rem;
}.dial2 {width: 0.125rem;left: 0.5rem;
}.dial span,
.dial2 span {width: 0.05rem;height: 0.125rem;background: #699b9a;display: inline-block;vertical-align: top;border-radius: 0.0125rem;
}.dial2 span {width: 0.0375rem;height:0.0625rem;
}.yibiao_boot {width: 1.25rem;height: 0.875rem;background-image: url(~@/assets/3d2/yibiaoBoot.png);background-size: contain;color: #fff;position: absolute;z-index: 666;bottom: 0;left: 0.5rem;opacity: 0.9;background-repeat: no-repeat;
}
</style>

页面中使用

<dashboard ref="dashboardwe" :speed="carSpeed" :rate="carRate"></dashboard>
import dashboard from './modules/dashboard' //仪表盘组件data() {return {carSpeed: 0, //列车速度carRate: 0,//百分比}
}let that = this;that.carRate = 100 / 200 * 100;//测试数据that.carSpeed = Math.floor(Math.random()*200);//测试数据

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

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

相关文章

9-4 查找星期 (15分)

本题要求实现函数&#xff0c;可以根据下表查找到星期&#xff0c;返回对应的序号。 序号 星期 0 Sunday 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday函数接口定义&#xff1a; int getindex( char *s );函数getindex应返回字符串s序号。如果传入的参数…

SDI-12协议与STM32 进行uart通信

场景是用stm32与一款温湿度传感器通信&#xff0c;不过是基于SDI-12协议&#xff0c;SDI-12时序和UART类似&#xff0c;故采用UART传输&#xff0c;原理图如下 其中DIR_OUT_SDI是一个IO引脚&#xff0c;控制UART_TX_SDI是否使能&#xff0c;U10是三态门IC&#xff0c;即拉低DIR…

AI文章,AI文章生成工具

在互联网时代&#xff0c;随着信息爆炸式增长&#xff0c;文章的需求愈发旺盛。从博客、新闻、社交媒体到企业宣传&#xff0c;文字作为传达信息、吸引受众的工具变得愈发重要。但问题是&#xff0c;对于很多人来说&#xff0c;创作一篇高质量的文章并不容易。时间、创意、写作…

Qt获取屏幕(桌面)的大小或分辨率

Qt提供QDesktopWidget和QScreen两个类获取屏幕大小。Qt5开始&#xff0c;QDesktopWidget官方不建议使用&#xff0c;改为QScreen。Qt 6.0 及之后版本&#xff0c;QDesktopWidget 已从QtWidgets 模块中被彻底移除。 QDesktopWidget QDesktopWidget 提供了详细的位置信息&#…

【c语言的函数指针介绍】

C语言中的函数指针是一种特殊的指针&#xff0c;它指向函数而不是数据。函数指针允许你在运行时动态地选择要调用的函数&#xff0c;这使得你可以根据需要在不同的函数之间切换&#xff0c;或者将函数作为参数传递给其他函数。函数指针的声明和使用如下&#xff1a; 声明函数指…

Tomcat多实例、负载均衡、动静分离

Tomcat多实例部署 安装jdk [rootlocalhost ~]#systemctl stop firewalld.service [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /opt [rootlocalhost opt]#ls apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh [rootlocalhost opt]#tar xf jdk-8u91-linu…

荣耀时刻!2023抖音电商作者峰会为优质直播间和卓越生态伙伴颁奖

9月27日&#xff0c;抖音电商在上海举行了以“向新成长”为主题的2023抖音电商作者峰会&#xff0c;并现场颁发了荣誉奖项。抖音电商优质直播间以及践行抖音电商作者精神四个维度的年度荣誉一一揭晓。 过去一年&#xff0c;数百万作者与众多品牌商家、MCN机构和精选联盟服务商…

RockyLinux9.2 网卡配置和nmcli、nmtui命令的使用

NetworkManager NetworkManager 是一个标准的Linux网络配置工具套件&#xff0c;支持服务器&#xff0c;也支持桌面环境&#xff0c; 发展到如今&#xff0c;绝大多数流行的发行版都支持它。 这套网络配置工具适用于 Rocky Linux 8 及更高版本。 nmcli是nm的命令行工具、nmt…

面试题库(十):NIO和Netty面试题

NIO 阐述 NIO原理&#xff1f;BIO/NIO/AIO有什么区别&#xff1f;有那些实现&#xff1f;讲讲NIO的原理与实现&#xff1f;NIO用到了哪个经典技术思想&#xff1f;JDK1.8中NIO有做什么优化了解多路复用机制 常见问题 同步阻塞、同步非阻塞、异步的区别&#xff1f;select、pol…

FireDAC 同一个查询语句中有join, 同时更新多个数据表设置

dfdquery.sql.text : select a.*, b.* from a left join b on a.id b.id fdqery.cacheupdate : true; //这样可更方便回退多表错误 fdquery.updateoptions.updatenobasefields : true; //副表字段可以编辑 fdquery.updateobject : TFdUpdateSqL; 或者fdquery.onupdaterec…

Java研发规范

文章目录 一、code规范二、需求跟进实践总结**需求分析****设计****开发** 三、幂等&一致性四、代码规范五、项目流程5.1 详设汇总5.2 排期5.3 数据组影响5.4 全流程SOP预案5.5 每日测试进度汇总5.6 灰度方案5.7 上线计划5.8 风险评估 一、code规范 【强制】POJO类中布尔类…

打造卓越摄影作品,尽享专业级编辑体验——DxO PhotoLab 7 for Mac

DxO PhotoLab 7 for Mac 是一款功能强大的专业照片编辑软件&#xff0c;为摄影爱好者和专业摄影师提供了优秀的工具和功能&#xff0c;让您能够轻松打造卓越的摄影作品并实现专业级的编辑效果。 DxO PhotoLab 7 提供了一套先进的图像处理算法&#xff0c;能够准确地还原照片的…

ORACLE 在内存管理机制上的演变和进化

截止目前&#xff0c;计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中&#xff0c;已成为当前各种软件和应用程序提高数据访问性能&#xff0c;减少访问延迟的最为有效的途径。 然而&#xff0c;内存作为关键的计算资源&am…

K8S-存储卷,pv,pvc

pv&#xff0c;pvc 一、emptyDir存储卷1.概述2.示例 二、hostPath存储卷1.概述 三、nfs共享存储卷1.在stor01节点上安装nfs&#xff0c;并配置nfs服务2.master节点操作3.在nfs服务器上创建index.html4.master节点操作 四、PVC 和 PV1.概述2.PV和PVC之间的相互作用遵循的生命周期…

LeetCodeTop100(一)

文章目录 p1.1. 两数之和p2.2. 两数相加p3.3. 无重复字符的最长子串p4. 4.寻找两个正序数组的中位数p5.5. 最长回文子串p7.11. 盛最多水的容器p8.15. 三数之和p9.17. 电话号码的字母组合p10.19. 删除链表的倒数第 N 个结点p11.20. 有效的括号p12.21. 合并两个有序链表p13.22. 括…

基于Java的传统文化宣传平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【QandA C++】进程、线程、协程、进程间通信的方式、线程同步机制、守护线程、僵尸进程、孤儿进程、线程切换的资源等重点知识汇总

目录 进程、线程和协程的区别 线程和进程的区别 进程 线程 进程间通信方式 线程同步机制 守护进程、僵尸进程、孤儿进程 进程/线程切换过程切换的资源有哪些 进程、线程和协程的区别 进程 线程 协程 定义 资源分配和拥有的基本单位 程序执行的基本单位 用户态的轻…

python接口自动化(一)--什么是接口、接口优势、类型(详解)

简介 经常听别人说接口测试&#xff0c;接口测试自动化&#xff0c;但是你对接口&#xff0c;有多少了解和认识&#xff0c;知道什么是接口吗&#xff1f;它是用来做什么的&#xff0c;测试时候要注意什么&#xff1f;坦白的说&#xff0c;笔者之前也不是很清楚。接下来先看一…

Ci2451-2.4g无线MCU收发芯片

Ci2451 是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分缩短2.4GHz无线产品设计周期并优化产品成本。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff…

005:根据股票代码和起始日期获取K线数据

我们改进《001》中的部分&#xff0c;因为他他没法在可视化界面输入信息&#xff0c;这样太麻烦。我们设法在可视化界面输入股票代码和起始日期&#xff0c;这样可以灵活得多。这部分&#xff0c;我们仍旧只获取日K线的数据。 import tkinter as tk from tkinter import messa…