vue使用canvas绘制360度仪表盘,根据鼠标选择指针获取度数。

news/2024/11/24 16:43:51/
<template><div>角度:<input v-model="selectedAngle"></input><br><div><a-input-number:default-value="100":min="0":max="100":formatter="value => `${value}%`":parser="value => value.replace('%', '')"@change="onChange"/></div><canvas ref="canvas" @mousemove="handleMouseMove" @click="handleClick"></canvas></div>
</template><script>export default {name:"AngleSelecd",mounted() {this.canvas = this.$refs.canvas;this.context = this.canvas.getContext("2d");this.selectedAngle = 0;this.drawDashboard();},methods: {onChange(value) {console.log('changed', value);this.value=valuethis.selectedAngle=this.value},drawDashboard() {const centerX = this.canvas.width / 2;const centerY = this.canvas.height / 2;const radius = Math.min(centerX, centerY) - 10;this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);// 绘制仪表盘背景this.context.beginPath();this.context.arc(centerX, centerY, radius, 0, 2 * Math.PI);this.context.fillStyle = "lightgray";this.context.fill();// 绘制角度标记this.context.font = "12px Arial";this.context.fillStyle = "black";this.context.textAlign = "center";this.context.textBaseline = "middle";for (let angle = 0; angle < 360; angle += 30) {const angleRad = angle * (Math.PI / 180);const markerX = centerX + (radius - 10) * Math.cos(angleRad);const markerY = centerY - (radius - 10) * Math.sin(angleRad);this.context.fillText(angle.toString(), markerX, markerY);}// 绘制指针const angle = this.selectedAngle * (Math.PI / 180);const pointerLength = radius * 0.8;const pointerX = centerX + pointerLength * Math.cos(angle);const pointerY = centerY - pointerLength * Math.sin(angle);this.context.beginPath();this.context.moveTo(centerX, centerY);this.context.lineTo(pointerX, pointerY);this.context.lineWidth = 2;this.context.strokeStyle = "red";this.context.stroke();// 打印选中角度this.context.font = "16px Arial";this.context.fillStyle = "black";this.context.fillText(`Selected    Angle: ${this.selectedAngle}°`, 10, 20);},handleClick(event) {this.updateSelectedAngle(event);},handleMouseMove(event) {if (event.buttons === 1) {this.updateSelectedAngle(event);}},updateSelectedAngle(event) {const rect = this.canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;const centerX = this.canvas.width / 2;const centerY = this.canvas.height / 2;// 计算选中角度const angle = Math.atan2(centerY - y, x - centerX);let selectedAngle = (angle * 180) / Math.PI;if (selectedAngle < 0) {selectedAngle += 360;}this.selectedAngle = Math.round(selectedAngle);this.increaseCounter()this.drawDashboard();},increaseCounter() {console.log("实时发送数据:",this.selectedAngle)this.$emit("counter-updated", this.selectedAngle);},},data() {return {timer:null,canvas: null,context: null,selectedAngle: 0,value:null};},watch: {selectedAngle(newValue) {this.drawDashboard();this.increaseCounter()this.onChange(newValue)},}};
</script>


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

相关文章

基于SpringBoot+Vue的校园台球厅人员与设备管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

聊聊Json这点事儿

目录导读 聊聊Json这点事儿1. Json使用场景2. Json类型2.1 Json对比列表2.2 Json 选型 3. Json在项目中的实践3.1 Json字符串和模型转换3.1.1 Json字符串和模型转换3.1.2 Json字符串转换成复杂的Java对象3.1.3 Java特殊类型转换成Json字符串3.1.4 Java Json扩展使用3.1.4.1 Jso…

ORACLE数据库 —— PL/SQL知识点

ORACLE数据库 PL/SQL语句基础知识点 适合有SQL基础的人群。 禁止转载&#xff01; PL/SQL 是ORACLE对标准SQL的扩展&#xff0c;是一种过程化语言&#xff0c;属于第三代语言。 PL/SQL语言的组成&#xff1a; 声明部分 可执行部分 异常处理部分 PL/SQL语言的结…

若依去掉Button按钮的上边距

style.css .btn {border-radius: 3px;/*margin-top: 5px;*/ }

Vue中如何进行剪贴板操作?

Vue中如何进行剪贴板操作&#xff1f; 在Web应用程序中&#xff0c;剪贴板&#xff08;Clipboard&#xff09;操作是非常常见的操作之一。Vue.js是一款流行的JavaScript框架&#xff0c;它提供了一些有用的工具来处理DOM元素和用户界面。本文将介绍如何在Vue.js中使用剪贴板操…

石大师装机大师好用吗 石大师装机大师重装教程

石大师装机大师是一款专业的系统装机工具&#xff0c;界面简洁&#xff0c;操作简单&#xff0c;支持安装任何操作系统&#xff0c;且不需要具备专业的知识&#xff0c;一键式自动下载安装&#xff0c;非常方便。下面我们就来看看石大师装机大师详细的重装教程。 石大师U盘装系…

VS2015官方下载地址(个人免费版)

VS2015官方下载地址&#xff1a; https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs VS2015官方下载地址&#xff08;个人免费版&#xff09;&#xff1a; http://news.mydrivers.com/1/439/439398.htm

c语言安卓录屏,金舟录屏大师app下载

金舟录屏大师app是一款不错的录屏软件&#xff0c;这款软件支持高清1080P视频&#xff0c;录制视频画面超清晰&#xff0c;支持竖屏录制和横屏录制&#xff0c;软件界面简洁易于上手使用&#xff0c;需要的朋友快来下载吧&#xff01; 软件介绍 一款无需root完全免费不限时长录…