uniapp,自绘仪表盘组件(基础篇)

uniapp中uview组件库CircleProgress圆形进度条的高级定制技巧 本文深入探讨了在uniapp中使用uview组件库的CircleProgress圆形进度条进行高级定制的方法。内容涵盖动态进度平滑动画、突破限制实现动态颜色与渐变效果、动画性能优化以及利用插槽实现仪表盘等高级视觉创意,帮助开发者充分发挥该组件的潜力,提升应用交互体验。 阅读详情

在这里插入图片描述

一、为什么需要自绘仪表盘?

在物联网、数据监控等场景中,仪表盘是常见的数据可视化组件。uniapp的组件市场虽然有许多现成方案,但自绘组件具有以下优势:

  • 完全掌控视觉效果
  • 无依赖零冗余
  • 高性能Canvas渲染
  • 轻松适配多端

二、准备知识

  • 基础Canvas绘图API
  • uni-app的Canvas组件使用
  • 三角函数基础
  • Vue组件开发基础

三、实现基础仪表盘

1. 组件模板结构

<template>
  <view class="gauge-container">
    <canvas 
      canvas-id="gaugeCanvas"
      :style="{ width: canvasSize + 'px', height: canvasSize + 'px' }"
    ></canvas>
    <view class="value-text">{{ currentValue }}</view>
  </view>
</template>

2. 核心绘制逻辑

export default {
  props: {
    value: { type: Number, default: 0 },      // 当前值
    max: { type: Number, default: 100 },     // 最大值
    min: { type: Number, default: 0 },       // 最小值
    size: { type: Number, default: 300 }     // 画布尺寸
  },
  
  mounted() {
    this.initCanvas();
  },

  methods: {
    initCanvas() {
      this.ctx = uni.createCanvasContext('gaugeCanvas', this);
      this.drawBase();
      this.drawPointer();
    },

    // 绘制底盘
    drawBase() {
      const center = this.canvasSize / 2;
      const radius = center * 0.8;
      
      // 外圆环
      this.ctx.beginPath();
      this.ctx.arc(center, center, radius, 0.75 * Math.PI, 2.25 * Math.PI);
      this.ctx.strokeStyle = '#eee';
      this.ctx.lineWidth = 8;
      this.ctx.stroke();

      // 刻度线
      const totalTicks = 20;
      for (let i = 0; i <= totalTicks; i++) {
        this.ctx.save();
        this.ctx.translate(center, center);
        const angle = 0.75 * Math.PI + (i / totalTicks) * 1.5 * Math.PI;
        this.ctx.rotate(angle);
        
        // 长刻度
        this.ctx.beginPath();
        this.ctx.moveTo(radius - 15, 0);
        this.ctx.lineTo(radius, 0);
        this.ctx.strokeStyle = i % 5 === 0 ? '#333' : '#999';
        this.ctx.lineWidth = i % 5 === 0 ? 3 : 1;
        this.ctx.stroke();
        
        this.ctx.restore();
      }
    },

    // 绘制指针
    drawPointer() {
      const center = this.canvasSize / 2;
      const valueAngle = this.getCurrentAngle();
      
      this.ctx.save();
      this.ctx.translate(center, center);
      this.ctx.rotate(valueAngle);

      // 指针三角形
      this.ctx.beginPath();
      this.ctx.moveTo(-8, 0);
      this.ctx.lineTo(0, -center * 0.7);
      this.ctx.lineTo(8, 0);
      this.ctx.fillStyle = '#e64340';
      this.ctx.fill();

      // 中心圆点
      this.ctx.beginPath();
      this.ctx.arc(0, 0, 5, 0, 2 * Math.PI);
      this.ctx.fillStyle = '#333';
      this.ctx.fill();

      this.ctx.restore();
      this.ctx.draw();
    },

    getCurrentAngle() {
      const range = this.max - this.min;
      const progress = (this.value - this.min) / range;
      return 0.75 * Math.PI + progress * 1.5 * Math.PI;
    }
  }
}

3. 样式优化

.gauge-container {
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
}

.value-text {
  position: absolute;
  font-size: 24px;
  font-weight: bold;
  color: #333;
}

四、使用示例

<template>
  <view class="container">
    <Gauge :value="75" :max="100" size="300" />
  </view>
</template>

<script>
import Gauge from '@/components/gauge.vue'

export default {
  components: {
    Gauge
  }
}
</script>

五、核心实现原理

角度计算:将数值映射到135°~315°的扇形角度(0.75π ~ 2.25π)
坐标系变换:通过translate和rotate实现指针旋转
分层绘制:先绘制静态元素(底盘),再绘制动态元素(指针)
性能优化:使用Canvas的save/restore管理绘图状态


六、扩展方向

添加动画效果(使用requestAnimationFrame)
绘制渐变颜色区间
添加触摸交互
实现双指针仪表
添加数字标签


七、常见问题

模糊问题:确保canvas尺寸与样式尺寸一致
层级问题:数值文本需要绝对定位覆盖在canvas上
单位转换:使用uni.upx2px处理不同屏幕适配
多次绘制:在修改数据后需要手动调用draw方法

通过这个基础实现,开发者可以快速掌握uniapp中Canvas组件的使用技巧,后续可根据具体需求进行样式定制和功能扩展。这种自绘方案在H5和小程序端均可获得良好的性能表现。

Claude Code、Codex与Cursor在UniApp复杂组件开发中的实战对比 本文对比了Claude Code、Codex与Cursor在UniApp复杂组件开发中的实战表现。通过动态表单、可视化图表等组件的开发测试,详细分析了三款工具在开发效率、代码质量和适用场景上的差异,为前端开发者提供选型建议和优化策略。 阅读详情

相关推荐

uniapp 使用图表

uCharts是一款基于canvas API开发的适用于所有前端应用的图表库,开发者编写一套代码,可运行到 Web、iOS、Android(基于 uni-app / taro )、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝/京东/360)、快应用等更多支持 canvas API 的平台uCharts官网 - 秋云uCharts跨平台图表库uCharts跨平台图表库,全端全平台支持的图表库,开箱即用。

每天都要努力学习哦~~ 2604

OpenClaw 企业级自动化系统架构设计与实现

本文介绍基于 OpenClaw 构建的企业级自动化系统的完整架构设计、技术选型、实现细节和性能优化方案。

2604_95445636的博客 484

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 668

S32K3 eMIOS输入捕获(ICU)全解析:从信号测量到代码实现

本文深入解析了S32K3 eMIOS输入捕获(ICU)技术,从信号测量到代码实现的完整流程。详细对比了六种核心捕获模式的性能差异,提供了动态模式切换、Counter Bus配置、中断服务程序优化等实战技巧,并分享了汽车电子中的典型应用案例,如发动机转速测量和CAN唤醒脉冲检测。

weixin_33137081的博客 347

PCI Express 权威指南:从协议原理到芯片实现

目录 全文总览第一部分:PCIe体系结构概览第1章 互连技术的演进与PCIe的诞生1.1 从ISA到PCI:并行总线的辉煌与瓶颈1.2 PCI-X的尝试与局限1.3 串行革命:从AGP、PCI到PCIe的范式转移1.4 PCIe的核心优势第2章 PCIe系统全局视角2.1 系统拓扑:Root Complex, Switch, Endpoint的职能与关系2.2 拓扑结构实例:服务器、工作站、嵌入式系统2.3 枚举与配置:系统如何发现和组织PCIe设备2.4 地址空间第3章 PCIe协议分层架构3.1 分层模

qq_42882296的博客 2894

华为昇腾开发——多模型资源管理(C++)

在使用Ascend ACL(Ascend Computing Language)的ACLLite库进行多模型推理时,合理的资源管理至关重要。

如果想成为中心,那么就到中心去吧。 576

2025年新发表的语音大模型全双工模型/框架/技术

参考该论文,给出2025年新发表的全双工模型或框架或技术下面这份清单专挑、且与“全双工语音对话/同步对话(边听边说、可打断、回馈/相槌、重叠语音)”直接相关的。我也结合你提到的的四大维度(暂停处理、相槌、顺滑换手、打断管理)来点出它们各自的贡献点,便于后续评测与对比。

u013250861的博客 630

微信小程序 - 实现嵌套H5页面唤起微信支付的实现方案+完整流程源码,微信小程序webview(H5页面)调用微信小程序支付,嵌套h5页面怎么实现小程序支付(Vue2/3移动端H5网页、公众号网页等)

h5嵌入微信小程序微信支付,H5网页嵌入到微信小程序内如何支付,微信小程序webview组件交互,内联h5页面并网页实现微信支付,微信H5页面实现微信小程序支付,微信小程序嵌套webview实现小程序微信支付,小程序中内嵌H5网页支付怎么办,用网页的支付还是小程序的支付?支付没反应,支付报错怎么办,微信小程序内嵌h5,h5调用小程序支付功能解决方案,H5网页cors跨域,真机测试无法唤起支付,无法唤起支付,uniapp微信小程序,h5小程序调用微信支付,微信小程序内嵌H5页面,如何实现微信支付功能,微信小程

🏆 前端领域优质创作者 1万+

【51单片机仿真】基于51单片机设计的多功能电子时钟日历(实时时钟闹钟秒表温度检测)系统__资料编号5

该项目是基于单片机的多功能电子时钟系统,集成了时间显示、闹钟设置、秒表功能以及温度显示等功能。主要硬件包括1602液晶显示屏、DS1302时钟芯片、DS18B20温度传感器和蜂鸣器。系统通过按键进行时间和闹钟的设置,并实时显示当前时间和温度。

嵌入式阿齐Archie 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: S19文件格式详解:汽车ECU软件升级中的核心镜像格式
下一篇: 深入Linux内核学习的系统指南:从入门到工程实践
智驾
博客等级 码龄11年 6671粉丝 574原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值