在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样

在uniapp开发中使用canvas封装了一个叫cirlceTemp的组件(温度圆环图表)

封装的HTML代码

html 复制代码
<template>
  <view class="progress-box" :style="{ width: `${progressWidth}rpx`, height: `${progressHeight}rpx` }">
    <canvas class="progress-bg" canvas-id="cpbg"></canvas>
  </view>
</template>

组件的使用

html 复制代码
<circleTemp :temperature="probleTemp" :unit="unit" :deviceId="deviceId"/>

使用时,发现数据居然被后面设备的数据覆盖了,后面项的数据变化,前面的也跟着变化

问题

在uniapp中使用canvas封装组件遇到的坑,数据被后面设备覆盖,导致数据和前面的设备一样,而导致这个问题是因为ID的问题,canvas-id="cpbg",canvas-id="cpbg" 是静态的名称。多个 circleTemp 组件实例共享相同 canvas-id,导致可能的冲突。

解决方案 :可以将 canvas-id 动态化(必须唯一),例如将 deviceId 作为 canvas-id 的一部分:

html 复制代码
<template>
  <view class="progress-box" :style="{ width: `${progressWidth}rpx`, height: `${progressHeight}rpx` }">
    <canvas class="progress-bg" :canvas-id="`cpbg-${deviceId}`"></canvas>
  </view>
</template>

然后在 uni.createCanvasContext("cpbg", this) 中使用动态 ID:

javascript 复制代码
const ctx = uni.createCanvasContext(`cpbg-${this.deviceId}`, this)

uniapp 实现同时连接多蓝牙设备

uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑-CSDN博客

相关推荐
senijusene15 小时前
Linux软件编程: 线程属性与线程间通信详解
java·linux·jvm·算法
阿珊和她的猫15 小时前
Safari浏览器中监听页面关闭事件的技术探讨
前端·safari
昱宸星光15 小时前
spring cloud gateway内置路由断言工厂
java·开发语言·前端
摸鱼的春哥15 小时前
春哥的Agent通关秘籍11:本地RAG实战(中上)
前端·javascript·后端
Stewie1213815 小时前
企业高性能web服务器——Nginx
服务器·前端·nginx
亓才孓15 小时前
jdk动态代理和Cglib动态代理的区别,为什么Cglib更适配SpringAOP
java·开发语言
塔中妖15 小时前
Windows 安装 Maven 详细教程(含镜像与本地仓库配置)
java·windows·maven
colicode16 小时前
安卓Android语音验证码接口API示例代码:Kotlin/Java版App验证开发
android·java·前端·前端框架·kotlin·语音识别
Java后端的Ai之路16 小时前
【 Java】-网络协议核心知识问答(比较全)
java·开发语言·网络协议
小道仙971 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest