2012-12-14 44 views
1

我试图让我的弧的终止角度,从X到Y.我可以动画一个圆弧的结束角度吗?

这是我有:http://jsfiddle.net/97dUJ/

我可以做:

var endAngle = 0 * Math.PI; 

动画到:

var endAngle = 0.5 * Math.PI; 

不仅仅是跳到那个角度,而且实际上是一个简单的动画,比如easeInOut或者其他东西......这可能吗?谢谢!

+0

尝试使用新的'requestAnimationFrame()'thingy来完成,在渲染每个帧之后,重新绘制一个稍长的圆弧。这里有一个相关的链接:http://paulirish.com/2011/requestanimationframe-for-smart-animating/ – rmobis

+0

我对HTML5相当陌生,对于如何采取这种方法并将其应用于该小提琴有何想法?谢谢! – ttothec

+0

我假设你是为了教育目的而这样做的,但是如果你正在为这个商业项目工作(并且为了其他读者的利益),我强烈建议你看看D3(http:///d3js.org/),因为它会为你完成所有繁重的工作,并让你专注于最终结果。快乐学习! –

回答

0

它很简单,你只需要添加一个setTimeout或​​并增加你想要乘以结束角度的值。

Live Demo

var canvas = document.getElementById('myCanvas'); 
     var context = canvas.getContext('2d'); 
     var x = canvas.width/2; 
     var y = canvas.height/2; 
     var radius = 75; 
     var startAngle = 1.5 * Math.PI; 
     var curVal = 0; 
     var endAngle = 0 * Math.PI; 
     var counterClockwise = false; 

function animate(){ 
    if(curVal < 0.5){ 
     curVal+= 0.01; 
    } 
     endAngle = curVal * Math.PI; 
     context.beginPath(); 
     context.arc(x, y, radius, startAngle, endAngle, counterClockwise); 
     context.lineWidth = 15; 
     // line color 
     context.strokeStyle = 'black'; 
     context.stroke(); 
    setTimeout(animate,30); 
} 

animate(); 
​ 
+0

这是一个很好的例子,只需要停止功能运行一旦动画完成。如果(curVal <0.5)setTimeout(animate,30);则添加 ; } 最后。 –

2

你可以动画则endAngle属性清除画布和重绘最新值弧形,这样的..

var canvas = document.getElementById('myCanvas'); 
var context = canvas.getContext('2d'); 
var props = { 
    x : canvas.width/2, 
    y : canvas.height/2, 
    radius : 75, 
    startAngle : 0, 
    endAngle : 0, 
    counterClockwise : false 
} 

function drawArc() { 
    context.clearRect(0, 0, canvas.width, canvas.height); 

    context.beginPath(); 
    context.arc(props.x, props.y, props.radius, props.startAngle, props.endAngle, props.counterClockwise); 
    context.lineWidth = 15; 

    // line color 
    context.strokeStyle = 'black'; 
    context.stroke();  
} 

TweenMax.to(props, 1, {endAngle: Math.PI * 2, yoyo:true, repeat:-1, ease:Quad.easeInOut, onUpdate:drawArc}); 

http://jsfiddle.net/B8XCw/8/

记:这是使用Tweenmax为动画

相关问题