我最近一直在玩画布,今天开始使用 setInterval 定期刷新/动画它。我很惊讶地看到这对 cpu 来说是多么沉重并且减慢了一切。看看网上的例子,我确信我的做法有问题。然后我最大程度地简化了我想做的事情(不是玩图像而是矩形,不使用太多对象等),但仍然遇到同样的问题。
我试图在两个矩形上获得一个白色闪光灯(12fps)......所以一点也不复杂......
这是我的代码。
function Canvas(name){
this.ctx=document.getElementById(name).getContext('2d');
this.canvas=this.ctx.canvas;
this.width=this.canvas.width;
this.height=this.canvas.height;
this.layers=new Array();
this.draw = function() {
this.canvas.width = this.canvas.width;
this.ctx.beginPath();
this.ctx.rect(0,0,this.width,this.height);
this.ctx.closePath();
this.ctx.fillStyle="#eaeaea";
this.ctx.fill();
this.ctx.beginPath();
this.ctx.rect(250,50,300,250);
this.ctx.closePath();
this.ctx.fillStyle="#ff0000";
this.ctx.fill();
intensity=Math.random();
this.flash(intensity);
};
this.flash = function(intensity) {
this.ctx.globalAlpha = intensity;
this.ctx.beginPath();
this.ctx.rect(0,0,this.width,this.height);
this.ctx.closePath();
this.ctx.fillStyle="#fff";
this.ctx.fill();
this.ctx.globalAlpha = 1;
setInterval(this.draw.bind(this),1000);
};
function initCanvas(){
mycanvas=new Canvas('myCanvas');
mycanvas.draw();
}
$(document).ready(function() {
initCanvas();
});
找到的解决方案:
使用setTimeout而不是setInterval。