Версия с setTimeout()
(или requestAnimationFrame()
) и без использования глобальных переменных (и без всей "сложной" математики):
const modifyPixel = (function(canvas) {
const context = canvas.getContext("2d");
const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
return function(index = 0) {
if (index >= imageData.data.length) {
return;
}
imageData.data[index] = 255;
context.putImageData(imageData, 0, 0);
index += 4;
setTimeout(function() {
modifyPixel(index + 4);
}, 50);
};
}(document.querySelector("canvas")));
(function init() {
const canvas = document.querySelector("canvas");
const context = canvas.getContext("2d");
context.beginPath();
context.rect(0, 0, canvas.width, canvas.height);
context.fillStyle = "green";
context.fill();
}());
const modifyPixel = (function(canvas) {
const context = canvas.getContext("2d");
const imageData = context.getImageData(0, 0, canvas.width, canvas.height);
return function(index = 0) {
if (index >= imageData.data.length) {
return;
}
imageData.data[index] = 255;
context.putImageData(imageData, 0, 0);
index += 4;
setTimeout(function() {
modifyPixel(index + 4);
}, 50);
};
}(document.querySelector("canvas")));
modifyPixel();
<canvas style="width:200px; height:200px" width="50px" height="50px"></canvas>