use*_*637 7 javascript html5 canvas html5-canvas
我写了一个函数,根据你指定它的大小来绘制一片披萨(以度为单位)
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, canvas.height/2, 0, degs * (-Math.PI/180), true);
context.lineTo(canvas.width/2, canvas.height/2);
context.clip();
context.drawImage(img, 0, 0, canvas.width,canvas.width);
}
img.src = 'pizza.png';
}
Run Code Online (Sandbox Code Playgroud)
当我尝试每250ms调用一次该函数时,第一次绘制后进度不会更新.
function runsEvery250ms(percent){
drawProgress(3.6 * percent);
}
Run Code Online (Sandbox Code Playgroud)
我需要对代码进行哪些更改以使画布每次重绘drawProgress(degs)?是否可以在不导致比萨饼闪烁的情况下进行重绘?
Tim*_*NET 14
使用context.clearRect(0, 0, canvas.width, 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, 0, canvas.width, canvas.height);
context.globalAlpha=1;
context.beginPath();
context.arc(canvas.width/2,canvas.height/2, canvas.height/2, 0, degs * (-Math.PI/180), true);
context.lineTo(canvas.width/2, canvas.height/2);
context.clip();
if (imgLoaded) context.drawImage(img, 0, 0, canvas.width,canvas.width);
context.restore();
}
Run Code Online (Sandbox Code Playgroud)