微信小程序: canvas 2d 接口支持同层渲染且性能更佳,建议切换使用

彩虹网

在使用微信小程序的 canvas demo 代码绘制了一个矩形之后whatsapp网页版,发现小程序开发工具的 console 中有警告提示:

canvas 2d 接口支持同层渲染且性能更佳,建议切换使用。详见文档:https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html#Canvas-2D-%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81

文档里说,基础库 2.9.0 起支持一套新 Canvas 2D 接口(需指定 type 属性),同时支持同层渲染whatsapp登录,原有接口不再维护。

是否有必要使用 canvas 2d

我觉得是有必要的,虽然原来的代码也能执行。但是 canvas 2d 带来的好处非常吸引人:

canvas 2d 的 hello world

将原来的 demo 进行一下改造:

wxml


注意whatsapp网页版,这里有两处显著的改动

js

const query = wx.createSelectorQuery()  // 创建一个dom元素节点查询器
query.select('#demo')
	.fields({   			// 需要获取的节点相关信息
		node: true,       // 是否返回节点对应的 Node 实例
		size: true         // 是否返回节点尺寸(width height)
	}).exec((res) => {
		const canvas = res[0].node                // canvas就是我们要操作的画布节点
		const ctx = canvas.getContext('2d')   // 以2d模式,获取一个画布节点的上下文对象
                
                // 不加这段,矩形底部会显示不全,我还没看懂
		const dpr = wx.getSystemInfoSync().pixelRatio
		canvas.width = res[0].width * dpr
		canvas.height = res[0].height * dpr
		ctx.scale(dpr, dpr)
		ctx.strokeStyle = "#00ff00"
		ctx.lineWidth = 5
		ctx.rect(0, 0, 200, 200)
		ctx.stroke()
	})

这里与原 demo 差异巨大

什么是同层渲染

从文档的解释来看,主要是针对多个原生组件的层级处理。而 canvas 2d 也是原生组件。

继续阅读

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。