开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
基础 api
基础
应用级事件
界面
导航栏
tabbar
路由
交互反馈
下拉刷新
联系人
选择城市
选择日期
动画
画布
canvas
canvasrenderingcontext2d
canvaspattern
offscreencanvas
旧版接口(停止更新)
地图
计算路径
键盘
滚动
节点查询
选项选择器
级联选择
设置窗口背景
设置页面是否支持下拉
字体
跳转
多媒体
缓存
文件
位置
网络
设备
worker
数据安全
分享
收藏
自定义通用菜单
更新管理
web-view组件控制
升级支付宝最新版本
隐私信息授权
小程序广告
开放能力 api
开发 > api > 基础 api > 界面 > 画布 > 旧版 canvas 迁移指南
评论
收藏
我的文档
设置

小程序的旧版 canvascontext 相关 api 已经不再维护,本指南主要介绍迁移至新版 canvas 2d 的操作方法。

特性差异

功能旧版新版
api 支持部分支持 web 标准支持全部 web 标准
绘制异步绘制同步绘制
webgl不支持支持 webgl 1.0 定义的属性和方法

新版 canvas api 对齐 web 标准:

  • canvasrendercontext2d 实现了 ,api 列表及文档请参考 。
  • webglrenderingcontext 实现了 ,api 列表及文档请参考 。

使用限制

新版 canvas api 需要基础库 2.7.0 或更高版本。canvas.totempfilepath 需要基础库 或更高版本,支付宝客户端 10.2.38 或更高版本。 若版本较低,建议采取 兼容处理

迁移步骤

修改 axml

新版 api 的 type 为必填属性。


  <canvas id="my-canvas">canvas>
  
  
  <canvas id="my-canvas" type="2d" onready="oncanvasready">canvas>
  

修改 canvascontext 获取方法

旧版 canvas 接口使用 my.createcanvascontext 同步获取 canvascontext。
新版 canvas 2d 接口需要先通过 selectorquery 获取 canvas 对象,再通过 canvas.getcontext 获取渲染上下文 renderingcontext。

// 旧版
  page({
      onload() {
          const context = my.createcanvascontext('my-canvas');
      }
  })
  // 改为如下新版
  page({
      oncanvasready() {
          my.createselectorquery()
              .select('#my-canvas')
              .node()
              .exec((res) => {
                  const canvas = res[0].node;
                  const context = canvas.getcontext('2d');
              });
      },
  });
  

修改绘制方法

旧版 canvas 接口需要调用 canvascontext.draw 后才会进行绘制,并且绘制过程是 异步 的,需要等待绘制完成回调才能进行下一步操作。
新版 canvas 2d 接口不再需要调用 draw 函数,所有绘制方法都会 同步 绘制到画布上。
注意:canvascontext.draw 函数第一个参数控制在绘制前是否保留上一次绘制(默认值为 false)。若在旧接口中设置为 false,则迁移至新接口后,需要在绘制前通过 clearrect 清空画布。

// 旧版
  // 若干绘制调用
  context.fillrect(0, 0, 50, 50)
  context.draw(false, () => {
      // 此时绘制完成
      console.log('draw done')
  })
  // 改为如下新版
  // 绘制前清空画布
  context.clearrect(0, 0, canvas.width, canvas.height)
  // 若干绘制调用
  context.fillrect(0, 0, 50, 50)
  // 此时绘制完成
  console.log('draw done')
  

修改图片绘制

旧版 canvas 接口 canvascontext.drawimage 直接传入图片 url。
新版 canvas 2d 接口需要先通过 canvas.createimage 创建图片对象,onload 图片加载完成回调触发后,再将图片对象传入 context.drawimage 进行绘制。

// 旧版
  const src = 'https://img.alicdn.com/tfs/tb1gvvmj2bntkjjy0fdxxcppvxa-520-280.jpg'
  context.drawimage(src, 2, 2, 250, 80);
  // 改为如下新版
  const img = canvas.createimage();
  img.src = "https://img.alicdn.com/tfs/tb1gvvmj2bntkjjy0fdxxcppvxa-520-280.jpg";
  img.onload = () => {
    context.drawimage(img, 10, 10, 100, 100);
  }
  

修改 totempfilepath

使用限制

canvas.totempfilepath 需要基础库 或更高版本,支付宝客户端 10.2.38 或更高版本。

// 旧版
  context.totempfilepath({
    success(res) {
      console.log(res.apfilepath);
    },
  });
  // 修改为如下新版
  canvas.totempfilepath({
    success(res) {
      console.log(res.apfilepath);
    },
  });
  
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图