javascript – 如何重绘画布(每250ms),每次重绘之间没有闪烁?

前端之家收集整理的这篇文章主要介绍了javascript – 如何重绘画布(每250ms),每次重绘之间没有闪烁?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了一个函数,根据你指定它的大小来绘制一块比萨饼(以度为单位)
function drawProgress(degs){

var canvas = document.getElementById('progress');
var context = canvas.getContext('2d');

context.globalAlpha=1;                
var img = new Image();
img.onload = function(){

    context.beginPath();
    context.arc(canvas.width/2,canvas.height/2,degs * (-Math.PI/180),true);
    context.lineTo(canvas.width/2,canvas.height/2);
    context.clip();                        
    context.drawImage(img,canvas.width,canvas.width);
}                           
img.src = 'pizza.png';

}

当我尝试每隔250ms调用函数时,在第一次绘制后不会更新进度.

function runsEvery250ms(percent){
    drawProgress(3.6 * percent);
}

每次调用drawProgress(degs)时,我需要对代码进行哪些更改以使画布重绘?是否可以在不使比萨饼闪烁的情况下进行重绘?

解决方法

使用context.clearRect(0,canvas.height);并缓存您的图像,每次刷新时都不要重新加载

更新:不知道这是否可行,未经测试并且已经有一段时间了,因为我使用了画布但是尝试了

var canvas = document.getElementById('progress');
var context = canvas.getContext('2d');
var img = new Image();
var imgLoaded = false;
img.src = 'pizza.png';

img.onload = function(){
  imgLoaded = true;
}

function drawProgress(degs){
    context.save();
    context.clearRect(0,canvas.height);
    context.globalAlpha=1;                

    context.beginPath();
    context.arc(canvas.width/2,canvas.height/2);
    context.clip();                        
    if (imgLoaded) context.drawImage(img,canvas.width);
    context.restore();
}

猜你在找的JavaScript相关文章