海洋_2023
海洋_2023
  • 发布:2023-12-04 11:50
  • 更新:2025-12-09 17:02
  • 阅读:2960

uni-app 微信小程序 canvas 组件 type='2d'不能正常显示

分类:uni-app

uni-app 微信小程序 canvas 组件 type='2d'不能正常显示,不使用type='2d'属性,正常,模拟器真机环境问题相同,type='2d' 也以拿到context 信息,但不能正常工作,无任何错误信息,就是不显示,是否有人遇到此问题,如何解决,烦请告知谢谢。 另,页面代码均使用uni-app 方式,未采用微信社区示例代码

`const drawImage=()=>{
//context 在组件加载完成事件获取
//ctx = uni.createCanvasContext('xCanvas',instant)

nextTick(()=>{  
    if(!openflag){  
        setTimeout(()=>{},200)  
    }  
    uni.getImageInfo({  
        src:billsrc.value,  
        success: (res)=>{  
             ctx.drawImage(res.path,0,0,width,300)  
             ctx.draw()  
             drawRect(res.width,res.height,width)  
             //console.log("res",ctx)  
        },  
        fail: (err) => {  
            console.log("feeinvoice_drawImage_error",err)  
        }  
    })  
})  

}
`

2023-12-04 11:50 负责人:无 分享
已邀请:
海洋_2023

海洋_2023 (作者)

已解决,未采用微信新版代码,变通处理,不使用type='2d'标签,画图完成后导出图片,用image标签显示,解决canvas层级问题,不过官方应认真修改API,不应要求用户去自行处理,否则就失去了产品价值

DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

感谢反馈,微信新版和旧版 canvas 带来的影响,目前首先在文档中进行补充和提示,后续横向对比各家 canvas 组件后给出最终结论。

w***@163.com

w***@163.com

一样。现在加上type='2d'标签还是不会显示

1***@qq.com

1***@qq.com

仍旧

  • DCloud_UNI_JBB

    你是什么问题?

    2025-12-09 17:03

  • 1***@qq.com

    回复 DCloud_UNI_JBB: 不传type小程序正常,传了type=2d draw没反应

    2025-12-10 10:14

  • DCloud_UNI_JBB

    回复 1***@qq.com: 用微信的新版API了吗?

    2025-12-10 10:36

  • 1***@qq.com

    回复 DCloud_UNI_JBB: 用的都是uniapp的的api,context是通过 createCanvasContext 获取的

    2025-12-10 14:20

  • DCloud_UNI_JBB

    回复 1***@qq.com: uni是用的微信的API,同样的写法你可以试试微信小程序能不能行

    2025-12-10 14:24

  • 1***@qq.com

    回复 DCloud_UNI_JBB: 微信是通过 this 去获取canvas 实例然后getcontext的,直接就卡在获取canvas实例上了

    2025-12-11 16:51

  • 1***@qq.com

    回复 DCloud_UNI_JBB: 最终这样写,可以正常渲染,希望快点解决这个问题

    <canvas type="2d" canvas-id="myCanvas" id="myCanvas" />

    uni.createSelectorQuery().in(instance)

    .select('#myCanvas')

    .fields({

    id: true, node: true, rect: true, context: true

    }, res => {

    if (!res) return

    // @ts-ignore

    const canvas = Array.isArray(res) ? res[0].node : res.node

    if (!canvas) return

    const ctx = canvas.getContext('2d') as CanvasRenderingContext2D

    2025-12-12 10:09

  • DCloud_UNI_JBB

    回复 1***@qq.com: 同样的写法原生微信小程序有没有这个问题?

    2025-12-12 10:40

  • DCloud_UNI_JBB

    回复 1***@qq.com: 描述清楚要解决的问题是什么?你提供的信息太少

    2025-12-12 10:43

  • 1***@qq.com

    回复 DCloud_UNI_JBB: 没用微信原生试过,问题就是 :组件内canvas type=2d , 使用uni.createCanvasContext(canvasID,instance) 获取的context 无法绘图

    2025-12-12 11:57

  • DCloud_UNI_JBB

    回复 1***@qq.com: 你写的这个就是调用的微信原生API,所以才让你试试原生微信小程序行不行

    2025-12-12 11:58

要回复问题请先登录注册