我有类似这样的代码
const canvas1 = document.getElementById('canvas-1');
const canvas2 = document.getElementById('canvas-2');
const createContext = () => {
let ctx1, ctx2;
if (document.querySelector('#gpu').checked) {
console.log('gpu');
ctx1 = canvas1.getContext('2d', { willReadFrequently: false });
ctx2 = canvas2.getContext('2d', { willReadFrequently: false });
} else {
console.log('cpu');
ctx1 = canvas1.getContext('2d', { willReadFrequently: true });
ctx2 = canvas2.getContext('2d', { willReadFrequently: true });
}
return [ctx1, ctx2];
};
let [ctx1, ctx2] = createContext();
<label for="gpu">gpu processing</label>
<input type="checkbox" id="gpu" ><br>
问题是,当调用该函数时上下文不会改变createContext()
,通过调试器判断,所有步骤都已完成,但是,尽管如此,当您单击复选框时上下文不会改变。
在后台,按钮调用了几个函数,包括创建上下文。
问题是,是否有可能CanvasRenderingContext2D
在开发过程中更改代码,还是一劳永逸地创建代码?第二种情况,是否可以改变willReadFrequently
上下文?
对于第一个问题,文档中明确指出,如果上下文类型相同,则返回相同的上下文。
至于第二个问题,
被设置为函数参数,也就是说,它可以被改变,但是如果你已经使用该上下文进行绘图,那么这样做真的没有意义。
例如:
返回编程绘图的上下文。
该属性只能设置一次,即第一次
getContext()
。再次调用时,会发出警告并忽略设置的值。