uni-app 在真机中canvas绘制的元素悬浮,内容不随父组件滚动问题

如图所示,在使用uni-app+vue3开发项目时,在真机上遇到一个问题,就是使用canvas绘制的标注图片,当页面滚动时,它始终悬浮在一个固定位置不动,且层级最高,悬浮在其他元素之上,使用了各种定位方法修改都不行。(模拟器上是正确的)

入图片描述](https://i-blog.csdnimg.cn/direct/51c0677b0be342aabcd07c10cf1c4735.png)

原因

后来查阅和资料发现,原来这是因为原生组件的使用限制,因canvas为原生组件,
由于原生组件脱离在 WebView 渲染流程外,因此在使用时有以下限制:

  1. 组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上。
  2. 后插入的原生组件可以覆盖之前的原生组件。
  3. 原生组件还无法在 scroll-view、swiper、picker-view、movable-view 中使用。
  4. 部分CSS样式无法应用于原生组件,例如: 无法对原生组件设置 CSS 动画
  5. 无法定义原生组件为 position:fixed
  6. 不能在父级节点使用 overflow:hidden 来裁剪原生组件的显示区域

解决办法

使用图片替换canvas显示

复制代码
<template>
  <view id="content" class="w-full !relative" :style="{ height: `${contentHeight}px` }">
    <canvas v-show="!canvasImgSrc" id="imgMark" :key="contentHeight" canvas-id="imgMark"
      :style="{ height: `${contentHeight}px`, width: '100%' }" />
    <image v-show="canvasImgSrc" :src="canvasImgSrc" mode="aspectFit" class="h-full w-full" />
  </view>
</template>

const canvasImgSrc = ref('')
const instance = getCurrentInstance()


***重点:***

ctx.draw(false, () => {
    console.log('drawCanvas>>>>>>finish>>>>>>>>')
    uni.canvasToTempFilePath({
      canvasId: 'imgMark',
      success: (res) => {
        canvasImgSrc.value = res.tempFilePath
        console.log('canvasImgSrc.value>>>>>', canvasImgSrc.value)
      },
      fail: (err) => {
        console.error('canvasToTempFilePath fail>>>>>>', err)
      },
    }, instance)
  })

特别注意:这里vue2中传this ,在vue3中传instance ,这个必传,否则会报错。

如果不传,就会一直报如下错。

相关推荐
2501_916008896 小时前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
QT.qtqtqtqtqt7 小时前
uni-app小程序前端开发笔记(更新中)
前端·笔记·小程序·uni-app
喵喵虫17 小时前
uniapp修改封装组件失败 styleIsolation
uni-app
游戏开发爱好者81 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
宠友信息1 天前
2025社交+IM及时通讯社区APP仿小红书小程序
java·spring boot·小程序·uni-app·web app
“负拾捌”1 天前
python + uniapp 结合腾讯云实现实时语音识别功能(WebSocket)
python·websocket·微信小程序·uni-app·大模型·腾讯云·语音识别
局外人LZ2 天前
Uniapp脚手架项目搭建,uniapp+vue3+uView pro+vite+pinia+sass
前端·uni-app·sass
2501_915918412 天前
在 iOS 环境下查看 App 详细信息与文件目录
android·ios·小程序·https·uni-app·iphone·webview