Closed xiaoiver closed 2 years ago
目前会尝试创建 OffscreenCanvas,如果不支持则使用 DOM API 创建 <canvas>。 但运行环境不一定支持 DOM API,例如小程序:
<canvas>
try { this.canvas = new window.OffscreenCanvas(0, 0); this.context = this.canvas.getContext('2d')!; if (!this.context || !this.context.measureText) { this.canvas = document.createElement('canvas'); this.context = this.canvas.getContext('2d')!; } } catch (ex) { this.canvas = document.createElement('canvas'); this.context = this.canvas.getContext('2d')!; }
随后度量文本流程一致,小程序下也支持 ctx.measureText 方法 https://opendocs.alipay.com/mini/api/rn2r7f
ctx.measureText
但不能使用画布初始化时传入的用于渲染的上下文,因为在度量文本时需要绘制,使用同一个上下文会造成干扰。
目前这个离屏的上下文还用在:
ctx.isPointInPath
ctx.createLinearGradient
在画布初始化参数中增加一个 offscreenCanvas 选项,例如在小程序环境中:
offscreenCanvas
const canvas = new Canvas({ // 省略其他参数 offscreenCanvas: { // 小程序中创建上下文方法 getContext: () => Canvas.createContext() } });
目前会尝试创建 OffscreenCanvas,如果不支持则使用 DOM API 创建
<canvas>
。 但运行环境不一定支持 DOM API,例如小程序:随后度量文本流程一致,小程序下也支持
ctx.measureText
方法 https://opendocs.alipay.com/mini/api/rn2r7f但不能使用画布初始化时传入的用于渲染的上下文,因为在度量文本时需要绘制,使用同一个上下文会造成干扰。
目前这个离屏的上下文还用在:
ctx.measureText
度量文本ctx.isPointInPath
Canvas2D APIctx.createLinearGradient
绘制渐变,再生成纹理