为函数中的单个值设置动画

Animating a single value within a function

本文关键字:设置 动画 单个值 函数      更新时间:2023-09-26

我正在尝试为我在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的动画。

这不完全是你的动画代码,但你应该掌握它的窍门。在这里演示

有关设置变量动画的更多信息

var FPS = 30;
setInterval(function() {
  update();
  draw();
}, 1000/FPS);

https://developer.mozilla.org/en/window.setInterval