我有一些HTML 5代碼,它以兩個黑色畫布開始,然後通過爲每一行繪製一條紅線,一次更新畫布一行。它應該看起來像一個落在黑色背景上的紅色窗簾。HTML5畫布沒有更新:瀏覽器bug或我做錯了什麼?
奇怪的是,起初它看起來像隨機行(比如說5%)被跳過並留下黑色。我以爲我有一個錯誤。但後來我注意到,如果我調整了瀏覽器窗口的大小,黑色線條全部變成紅色。那麼我認爲這是某種瀏覽器重繪錯誤。然後我注意到Chrome和Safari都有這種行爲。
那麼你認爲這兩個瀏覽器有相同的錯誤還是我做錯了什麼?
有趣的是,如果兩個畫布都使用style =「width:100%; height:100%」,則此問題消失。
<html>
<table>
<tr>
<td><canvas id="myCanvas1" style="width:100%; height:100%"></canvas></td>
<td><canvas id="myCanvas2" style="width:200px; height:400px"></canvas></td>
</tr>
</table>
<script type="text/javascript">
var canvases = [document.getElementById("myCanvas1"), document.getElementById("myCanvas2")];
for(var i = 0; i < canvases.length; i++) {
var canvas = canvases[i];
var ctx = canvas.getContext("2d");
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
function updateRow(rowNum) {
var done = true;
for(var i = 0; i < canvases.length; i++) {
var canvas = canvases[i];
if(rowNum >= canvas.height) {
return;
}
done = false;
var ctx = canvas.getContext("2d");
var imageDataForRow = ctx.getImageData(0, rowNum, canvas.width, 1);
for(var offset = 0; offset < imageDataForRow.data.length; offset += 4) {
imageDataForRow.data[offset] = 255;
imageDataForRow.data[offset + 1] = 0;
imageDataForRow.data[offset + 2] = 0;
imageDataForRow.data[offset + 3] = 255;
}
ctx.putImageData(imageDataForRow, 0, rowNum);
}
if(!done) {
var paintNextRow = function() {
updateRow(rowNum + 1);
}
setTimeout(paintNextRow, 1);
}
}
updateRow(0);
</script>
這發生在所有的browers? – Ricardo 2012-04-16 16:09:12
Chrome,Safari =是。 Firefox =否IE =甚至不會呈現(可能與手邊的問題無關)。 – Dejas 2012-04-16 16:30:24