Joe*_*Joe 42 javascript html5 html5-canvas
我想要一个HTML画布上下文,我可以绘制并在屏幕外阅读(在这个例子中,写文本和阅读创建的形状,但这是一个普遍的问题).我可能还想使用画布作为屏幕外帧缓冲.
我想我可以创建一个隐藏的DOM元素,但我宁愿用JavaScript创建它(我可能想在运行时创建和销毁一些画布).
可能?
Fel*_*ing 48
您可以使用以下命令创建新canvas元素document.createElement:
var canvas = document.createElement('canvas');
Run Code Online (Sandbox Code Playgroud)
然后从中获取上下文.只要确保你设置width和height.您不必将画布添加到树中以使其工作:
但你必须创建该节点.您可以为此创建一个函数:
function createContext(width, height) {
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
return canvas.getContext("2d");
}
Run Code Online (Sandbox Code Playgroud)
但这就是我的能力结束的地方......你是否可以某种方式将一个上下文转移到另一个上下文或画布,我不知道......
它的旧但是如何用toDataURL保存一个画布并使用drawImage复制到另一个画布.您还可以使用保存和恢复来制作帧缓冲区
function createCanvas(width, height) {
var c = document.createElement('canvas');
c.setAttribute('width', width);
c.setAttribute('height', height);
return c;
}
function canvasImg(canvas) {
var ctx = canvas.getContext('2d');
ctx.fillRect(0,0,canvas.width, canvas.height);
var img = canvas.toDataURL('image/png');
return img;
}
function placeImage(canvas, img) {
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0,0);
}
window.onload = function(){
var canvas = createCanvas(400, 400);
var hiddenCanvas = createCanvas(400,400);
var i = canvasImg(hiddenCanvas);
var img = new Image();
img.src = i;
placeImage(canvas, img);
document.body.appendChild(canvas);
}
Run Code Online (Sandbox Code Playgroud)
显然有一种新东西叫做OffscreenCanvas专为这个用例设计的。一个额外的好处是它也适用于 Web Workers。
您可以在此处阅读规范:https : //html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface
并在此处查看示例:https : //developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas
目前,它仅受 Chrome 完全支持,并且在 Firefox 和 Opera 的标志后面可用,但您始终可以在此处查看有关受支持浏览器的最新信息:https : //caniuse.com/#feat=offscreencanvas
ps:谷歌也有专门的指南解释它在网络工作者中的使用:https : //developers.google.com/web/updates/2018/08/offscreen-canvas