tencent cloud

腾讯云超级应用服务

动态与公告
【2025年1月2日】关于腾讯云小程序平台更名为腾讯云超级应用服务的公告
控制台更新动态
Android SDK 更新动态
iOS SDK 更新动态
Flutter 更新动态
IDE 更新动态
基础库更新动态
产品简介
产品概述
产品优势
应用场景
购买指南
计费概述
按量计费(后付费)
续费指引
停服说明
快速入门
套餐管理
概述
控制台账号管理
存储配置
加速配置
品牌化配置
平台功能
控制台登录
用户和权限体系
小程序管理
小游戏管理
应用管理
商业化
平台管理
用户管理
团队管理
运营管理
安全中心
代码接入指引
Demo 及 SDK 获取
Android
iOS
Flutter
App 服务端接入指南
GUID 生成规则
小程序开发指南
小程序介绍与开发环境
小程序代码组成
指南
框架
组件
API
服务端
JS SDK
基础库
IDE 使用指南
小游戏开发指南
指南
API
服务端
实践教程
小程序登录实践教程
小程序订阅消息实践教程
支付相关实践教程
广告接入实践教程
小游戏订阅消息实践教程
相关协议
数据处理和安全协议

Canvas 画布

PDF
聚焦模式
字号
最后更新时间: 2026-03-20 18:44:06
功能说明:画布。该组件是 原生组件,使用时请注意相关限制。相关 API wx.createCanvasContext。现支持新 Canvas 2D 接口,旧版接口不再维护。
参数及说明:
属性名
类型
默认值
说明
type
string
2d
支持 canvas 类型,目前仅支持2d
canvas-id
string
-
canvas 组件的唯一标识符
disable-scroll
boolean
false
当在 canvas 中滑动时且有绑定手势事件时,禁止屏幕滚动以及下拉刷新
bindtouchstart
eventhandle
-
手指触摸动作开始
bindtouchmove
eventhandle
-
手指触摸后移动
bindtouchend
eventhandle
-
手指触摸动作结束
bindtouchcancel
eventhandle
-
手指触摸动作被打断,如来电提醒,弹窗
bindlongtap
eventhandle
-
手指长按500ms之后触发,触发了长按事件后进行移动不会触发屏幕的滚动
binderror
eventhandle
-
当发生错误时触发 error 事件,detail = {errMsg: 'something wrong'}
注意:
canvas 标签默认宽度300px、高度150px。
同一页面中的 canvas-id 不可重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的画布将被隐藏并不再正常工作。
避免设置过大的宽高,在安卓下会有crash的问题。
旧版 canvas 接口使用 canvas-id 属性唯一标识 canvas;新版 Canvas 2D 可直接使用 id 标识。
旧版 canvas 接口使用 wx.createCanvasContext 同步获取 CanvasContext。新版 Canvas 2D 接口需要先通过 SelectorQuery 异步获取 Canvas 对象,再通过 Canvas.getContext 获取渲染上下文 RenderingContext。
旧版 canvas 接口的画布大小是根据实际渲染宽度决定的,开发者无法修改。新版 Canvas 2D 接口允许开发者自由修改画布的逻辑大小,默认宽高为 300*150。不同的设备上,存在物理像素和逻辑像素不相等的情况,所以一般我们需要用 wx.getWindowInfo 获取设备的像素比,乘上 canvas 的实际大小。
示例代码(新版):
WXML
JAVASCRIPT
<canvas type="2d" id="myCanvas"></canvas>
Page({
onReady() {
const query = wx.createSelectorQuery()
query.select('#myCanvas')
.fields({ node: true, size: true })
.exec((res) => {
const canvas = res[0].node
const ctx = canvas.getContext('2d')

const dpr = wx.getSystemInfoSync().pixelRatio
canvas.width = res[0].width * dpr
canvas.height = res[0].height * dpr
ctx.scale(dpr, dpr)

ctx.fillRect(0, 0, 100, 100)
})
}
})
示例代码(旧版):
WXML
JAVASCRIPT
<!-- canvas.wxml -->
<canvas style="width: 300px; height: 200px;" canvas-id="firstCanvas"></canvas>
<!-- 当使用绝对定位时,文档流后边的 canvas 的显示层级高于前边的 canvas -->
<canvas style="width: 400px; height: 500px;" canvas-id="secondCanvas"></canvas>
<!-- 因为 canvas-id 与前一个 canvas 重复,该 canvas 不会显示,并会发送一个错误事件到 AppService -->
<canvas style="width: 400px; height: 500px;" canvas-id="secondCanvas" binderror="canvasIdErrorCallback"></canvas>
Page({
canvasIdErrorCallback: function (e) {
console.error(e.detail.errMsg)
},
onReady: function (e) {
// 使用 wx.createContext 获取绘图上下文 context
var context = wx.createCanvasContext('firstCanvas')

context.setStrokeStyle("#00ff00")
context.setLineWidth(5)
context.rect(0, 0, 200, 200)
context.stroke()
context.setStrokeStyle("#ff0000")
context.setLineWidth(2)
context.moveTo(160, 100)
context.arc(100, 100, 60, 0, 2 * Math.PI, true)
context.moveTo(140, 100)
context.arc(100, 100, 40, 0, Math.PI, false)
context.moveTo(85, 80)
context.arc(80, 80, 5, 0, 2 * Math.PI, true)
context.moveTo(125, 80)
context.arc(120, 80, 5, 0, 2 * Math.PI, true)
context.stroke()
context.draw()
}
})


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈