<!-- 2d 类型的 canvas --><canvas id="myCanvas" type="2d" style="border: 1px solid; width: 300px; height: 150px;" />
id="myCanvas"
唯一标识一个 canvas,用于后续获取 Canvas 对象。type
用于定义画布类型,本例子使用 type="2d"
示例。wx.createSelectorQuery().select('#myCanvas') // 在 WXML 中填入的 id.fields({ node: true, size: true }).exec((res) => {// Canvas 对象const canvas = res[0].node// 渲染上下文const ctx = canvas.getContext('2d')})
wx.createSelectorQuery().select('#myCanvas') // 在 WXML 中填入的 id.fields({ node: true, size: true }).exec((res) => {// Canvas 对象const canvas = res[0].node// 渲染上下文const ctx = canvas.getContext('2d')// Canvas 画布的实际绘制宽高const width = res[0].widthconst height = res[0].height// 初始化画布大小const dpr = wx.getWindowInfo().pixelRatiocanvas.width = width * dprcanvas.height = height * dprctx.scale(dpr, dpr)})
300 * 150
。// 省略上面初始化步骤,已经获取到 canvas 对象和 ctx 渲染上下文// 清空画布ctx.clearRect(0, 0, width, height)// 绘制红色正方形ctx.fillStyle = 'rgb(200, 0, 0)';ctx.fillRect(10, 10, 50, 50);// 绘制蓝色半透明正方形ctx.fillStyle = 'rgba(0, 0, 200, 0.5)';ctx.fillRect(30, 30, 50, 50);
// 省略上面初始化步骤,已经获取到 canvas 对象和 ctx 渲染上下文// 图片对象const image = canvas.createImage()// 图片加载完成回调image.onload = () => {// 将图片绘制到 canvas 上ctx.drawImage(image, 0, 0)}// 设置图片srcimage.src = 'https://open.weixin.qq.com/zh_CN/htmledition/res/assets/res-design-download/icon64_wx_logo.png'
// 省略上面初始化步骤,已经获取到 canvas 对象和 ctx 渲染上下文// 绘制红色正方形ctx.fillStyle = 'rgb(200, 0, 0)';ctx.fillRect(10, 10, 50, 50);// 绘制蓝色半透明正方形ctx.fillStyle = 'rgba(0, 0, 200, 0.5)';ctx.fillRect(30, 30, 50, 50);// 生成图片wx.canvasToTempFilePath({canvas,success: res => {// 生成的图片临时文件路径const tempFilePath = res.tempFilePath},})
// 省略上面初始化步骤,已经获取到 canvas 对象和 ctx 渲染上下文const startTime = Date.now()// 帧渲染回调const draw = () => {const time = Date.now()// 计算经过的时间const elapsed = time - startTime// 计算动画位置const n = Math.floor(elapsed / 3000)const m = elapsed % 3000const dx = (n % 2 ? 0 : 1) + (n % 2 ? 1 : -1) * (m < 2500 ? easeOutBounce(m / 2500) : 1)const x = (width - 50) * dx// 渲染ctx.clearRect(0, 0, width, height)ctx.fillStyle = 'rgb(200, 0, 0)';ctx.fillRect(x, height / 2 - 25, 50, 50);// 注册下一帧渲染canvas.requestAnimationFrame(draw)}draw()
本页内容是否解决了您的问题?