我製作了一個窗口大小的畫布元素,並用隨機值填充(以便我可以輕鬆地看到它更新)。當窗口使用<body onresize="updateCanvas();">
時它會調整大小,並且速度很慢。這就是它將會如何,還是有更好的方法來做到這一點?快速調整大型畫布元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Window Sized Canvas</title>
<!-- <link href="style.css" rel="stylesheet" type="text/css"/>
Relevant style below: -->
<style type="text/css">
body {margin:0; padding:0;}
canvas {display:block;}
</style>
</head>
<body onresize="updateCanvas();">
<canvas id="hCanvas">Your browser does not support the canvas tag</canvas>
<script type="text/javascript">
var jCanvas = document.getElementById("hCanvas");
var jc2D = jCanvas.getContext("2d");
updateCanvas();
function updateCanvas() {
jCanvas.width = window.innerWidth;
jCanvas.height = window.innerHeight;
var jcW = jCanvas.width;
var jcH = jCanvas.height;
var jcWH4 = (jcW*jcH)<<2;
var jcImageData = jc2D.createImageData(jcW, jcH);
for (i = 0; i < jcWH4; i += 4) {
jcImageData.data[i] = (Math.random()*255)|0;
jcImageData.data[i+1] = (Math.random()*255)|0;
jcImageData.data[i+2] = (Math.random()*255)|0;
jcImageData.data[i+3] = 255;
}
jc2D.putImageData(jcImageData, 0, 0);
}
</script>
</body>
</html>
編輯:我發現一些不錯的代碼限制onresize()
。我只是發佈不同於上面的內容:
...
<body onresize="resizeTimer();">
...
var resizeDelay;
function resizeTimer() {
clearTimeout(resizeDelay);
resizeDelay = setTimeout("updateCanvas()", 200);
}
...
謝謝,這將對我想要做的一些事情有效。其他人應該與窗口成比例,所以我想我會用交替像素線的通過來填充這些線(直到所有像素線被填充)。 – asimes 2013-03-02 00:07:32