我正在尝试动画化我在HTML5中创建的形状.
myShape.drawFunc = function(){
var context = this.getContext();
context.beginPath();
context.arc(480, 480, animationValue, startingPoint * Math.PI, endingPoint * Math.PI, false);
context.lineto(480,480);
context.closePath();
this.fillstroke();
}
我想使用jQuery.animate将animationValue从一个值更改为另一个超时.我不确定如何实现这一目标,我还需要在动画Layer.draw()的每个步骤上运行一个函数.因为我的形状是画布形状.
有人知道如何在myShape.drawFunc中为animationValue设置动画吗?
我应该补充一点,我正在尝试在myShape.on(“ mouSEOver”,{});中创建动画.使用setInterval方法等会造成任何问题吗?
更新:
segment.on("mouSEOver",function(){
var startingPoint = segData[index].startingPoint;
var endingPoint = segData[index].endingPoint;
var startingRadias = segData[index].radias;
var maxRadias = 250;
var updateradias = startingRadias;
setInterval(function(){
if(updateradias < maxRadias){
updateradias++;
console.log("frame : "+updateradias);
this.drawFunc = function(){
var context = this.getContext();
context.beginPath();
context.arc(480, 480, updateradias, startingPoint * Math.PI, endingPoint * Math.PI, false);
context.lineto(480,480);
context.closePath();
this.fillstroke();
}
rawLayer.draw();
}
},1000/30);
});
console.log显示正在调用setInterval,但形状似乎未重绘.
解决方法:
是的,您可以使用animate()将您的animationValue从一个值更改为另一个超时值:
var drawFunc = function (animationValue) {
var context = $("#myCanvas")[0].getContext("2d");
context.fillStyle="#FF0000";
context.fillRect(animationValue, animationValue, 150, 75);
},
from = 0, to = 50;
// Now animate using the jQuery.animate()
$({ n: from }).animate({ n: to}, {
duration: 1000,
step: function(Now, fx) {
drawFunc(Now);
}
});
在这种情况下,我们将在1秒内从0动画到50.
这不完全是您的动画代码,但是您应该掌握它. Demo Here
有关animating variables的更多信息