收藏
回答

canvas 2d getContext 会无法获取到吗?

最近使用了 Canvas 2D https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html https://developers.weixin.qq.com/miniprogram/dev/api/canvas/RenderingContext.html

这样一段代码,发现在本地运行是好的,但是总是有报警 Cannot read property 'scale' of undefined;at SelectorQuery callback function,这是为啥呢 canvas.getContext('2d') 文档也没说这个什么时候会获取不到 context


const query = this.createSelectorQuery();
query.select('#canvas-id')
    .fields({ node: true, size: true })
    .exec((res) => {
        if (res && res[0] && res[0].node) {
            const canvas = res[0].node;
            const ctx = canvas.getContext('2d');
            ctx.scale(2, 2);
        }
    });
回答关注问题邀请回答
收藏

3 个回答

  • .
    .
    2020-09-22

    楼主解决了吗?是什么原因?

    2020-09-22
    有用 1
    回复
  • Natsuki
    Natsuki
    2020-08-07

    猜测组件已经 detached 了,还在执行 exec 的回调,能获取到 node 节点,但是 getContext 不到值

    2020-08-07
    有用
    回复
  • Admin ²º²⁴
    Admin ²º²⁴
    2020-07-20
    wxml记得加上id='canvas-id' 
    


    2020-07-20
    有用
    回复 7
    • Natsuki
      Natsuki
      2020-07-20
      加了的,是线上少量情况会报错
      2020-07-20
      回复
    • Admin ²º²⁴
      Admin ²º²⁴
      2020-07-20回复Natsuki
      那应该是页面没渲染完成时createSelectorQuery了。所以获取到的是undefined了就报错了
      2020-07-20
      回复
    • Natsuki
      Natsuki
      2020-07-21回复Admin ²º²⁴
      可是我加了 res & res[0] & res[0].node 判断呀,那就是获取到了节点的
      2020-07-21
      回复
    • Admin ²º²⁴
      Admin ²º²⁴
      2020-07-21回复Natsuki
      那就是基础库版本太低,getContext获取失败了。你不如在ctx.scale前加个判断,undefined时就不执行
      2020-07-21
      回复
    • Natsuki
      Natsuki
      2020-07-21回复Admin ²º²⁴
      不会基础库太低的,我前面判断了 2.9.0 基础库的才进的这段逻辑,可以加判断,这个可简单了,可是为啥会获取不到呢
      2020-07-21
      回复
    查看更多(2)
登录 后发表内容
问题标签