javascript - 为什么我的像素操作脚本这么慢?

标签 javascript html html5-canvas

我试图创建一些蓝色波浪,但如果我运行它,浏览器就会释放。只有当我将 Canvas 的大小减小到 80 和 60 时,它才有效。

<canvas id="canvas" width="800" height="600"></canvas>

脚本:

var canvas=document.getElementById('canvas'), ctx = canvas.getContext('2d');
var imageData = ctx.createImageData(canvas.width, canvas.height);

for(var i=0; i<imageData.width; i++) {
    for(var j=0; j<imageData.height; j++) {
        imageData.data[((imageData.width * j) + i) * 4] = 0;
        imageData.data[((imageData.width * j) + i) * 4+1] = 0;
        imageData.data[((imageData.width * j) + i) * 4+2] = 127*Math.sin(i/100)+128;
        imageData.data[((imageData.width * j) + i) * 4+3] = 255;
        ctx.putImageData(imageData, 0, 0);
    }
}

我做错了什么?为什么这么慢?

最佳答案

主要的减速是因为您在每次迭代时都绘制图像。

移动这条线

ctx.putImageData(imageData, 0, 0);

在你的循环之外。

关于javascript - 为什么我的像素操作脚本这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15343934/

相关文章:

javascript - jQuery - 如何根据子项的属性选择父项?

javascript - 设置浏览器关闭超时

javascript - 为什么 Google.com 的源代码如此困惑?

php - 如何使用php从mysql访问图像到html表

javascript - 如何正确添加到使用 requestAnimationFrame 不断更新的变量

html - canvas.toBlob() 方法在不同浏览器中的稳定性如何?

javascript - find 方法如何与数组一起使用?

javascript - 使用trunk js的响应式菜单如何使抽屉打开右侧

javascript - 在不重绘的情况下向现有 Canvas 添加更多空间?

javascript - 使用 jquery 制作 3d 效果