为什么我的画布动画弧在中点出现故障?

时间:2013-07-09 20:51:38

标签: javascript canvas

Fiddle, 我试图将其缩小到最重要的地步。我有一个用偏移量完成272度的画布弧。当绿色动画弧达到135度时,它在Chrome和其他浏览器中看起来像这样:

enter image description here

通常输入的值不会完全相同,因此它会非常快地跳过毛刺。但如果我完全摆脱它,那将是非常了不起的。我对画布很新,不知道该尝试什么。谢谢!

相关JS:

function setGauge(valForGauge, val, distance){
    var time = 500; 
    time = time / (Math.abs(valForGauge - preValForGauge));

    if (valForGauge > preValForGauge) {
        var animate = setInterval(function(){
            if (preValForGauge == valForGauge)
                clearInterval(animate);
            else {
                preValForGauge++;
                drawValueArc(preValForGauge);              
            }
        }, time);
    } else if (valForGauge < preValForGauge) {
        var animate2 = setInterval(function(){
            if (preValForGauge == valForGauge)
                clearInterval(animate2);
            else {
                preValForGauge--;
                drawValueArc(preValForGauge);
            }
        }, time);
    } else if (valForGauge == 0 || valForGauge == preValForGauge) {
        preVal = val;
    }
}

function drawValueArc(val) {
    drawArc(ctx2, 57, 32, "rgb(230, 230, 230)", startRadians, endRadians);
    drawArc(ctx2, 57, 31, "#27AE60", startRadians, val);
}

function drawArc(ctx, radius, width, color, start, end) {
    ctx.beginPath();
    ctx.arc(cx, cy, radius, (startRadians + offset) * deg2rad, (end + offset) * deg2rad, false);
    ctx.strokeStyle = color;
    ctx.lineWidth = width;
    ctx.stroke();

1 个答案:

答案 0 :(得分:3)

这显然是Chrome(和Canary)实施的一个错误。如果在FireFox(Aurora)中正常工作。在Safari中它很好(虽然花了一年的时间来制作动画)。歌剧也很好。

您应该从浏览器向Google报告错误(此处如何):
https://support.google.com/chrome/answer/95315?hl=en

您可以尝试使用此解决方案作为解决方法:

var deg2rad = Math.PI / 180.001; //179.999

更新小提琴包括解决方法:
http://jsfiddle.net/AbdiasSoftware/6ppDK/6/

Chrome中的arc方法存在许多问题,有些可能相关或不相关:
https://code.google.com/p/chromium/issues/detail?id=245233
https://code.google.com/p/chromium/issues/detail?id=243996
http://www.twiddla.com/test/ChromeCanvas.html