xiaokar
xiaokar
  • 发布:2025-03-13 10:38
  • 更新:2025-03-13 16:03
  • 阅读:82

【报Bug】使用唯一id的canvas一直报canvas-id xx in this page has already existed

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 专业版 24H2

HBuilderX类型: 正式

HBuilderX版本号: 4.44

第三方开发者工具版本号: 1.06.2412050win32-x64

基础库版本号: 3.7.10

项目创建方式: HBuilderX

示例代码:
这是部分canvas组件代码: <template> <view> <!-- 显示处理后的图片 --> <image v-if="processedImage" :src="processedImage" mode="widthFix" v-show="isShow" style="{width:cssWidth+'px',height:cssHeight+'px',...customStyle}" /> <!-- 隐藏的Canvas -->
<canvas :canvas-id="canvasName" @error="canvasIdErrorCallback" :style="{
width: ${realWidth}px,
height: ${realHeight}px,
position: 'absolute',
left: '-9999px',
top: '-9999px'
}"></canvas>
</view>
</template>

操作步骤:

初始渲染A组件正常,v-if切换组件B,组件B内的组件只要涉及canvas都报错

预期结果:

真机不报错,正常运行和显示

实际结果:

微信模拟器正常。
真机报错:canvas-id xx in this page has already existed

bug描述:

  1. 首页自己实现的底部导航,中间内容区使用v-if和v-show渲染对应的不同组件(第一次切换v-if,后续v-show)
  2. 首页组件A和B内使用了多个ColorIcon组件,用于实现png的换色,已确定canvas-id唯一
  3. 初始渲染组件A则切换B时B会报错canvas-id xx in this page has already existed
  4. 初始渲染组件B则切换A时A会报错
  5. 报错组件是所有canvas都报一次

大哥们有没有遇到类似的问题,以下方法试过都不行:

  1. 定时器延迟加载该canvas组件
  2. canvas-id加随机数
  3. 初始一起加载A和B组件
  4. 去除v-show
2025-03-13 10:38 负责人:无 分享
已邀请:
xiaokar

xiaokar (作者) - 一名对代码整洁度有强迫症的专业前端

旧版canvas有问题,整套换成type="2d"的格式就正常了!

要回复问题请先登录注册

  • 标题 / 粗斜体
  • 代码片段
  • 超链接 / 图片 / 视频
  • 列表 / 引用

文章内容较多时,可以用标题分段 :

## 大标题 
### 小标题

斜体 / 粗体 :

**粗体** 
*斜体*
***粗斜体***

代码片段 :

``` javascript
代码片段
```

超链接 :

[链接文字](链接地址) 例: [百度](http://www.baidu.com)

图片 :

![图片说明](图片地址) 例: ![百度logo](http://www.baidu.com/img/bdlogo.gif)

视频 :

!![视频说明](视频地址) 例: !![优酷视频](http://youku.com)

有序列表 :

1. 123
2. 123
3. 123

无序列表 :

- 123
- 123
- 123

引用 : ( 双回车后结束引用 )

> 引用内容
引用内容
引用内容