为什么我的Raphael JS动画不会循环?

时间:2010-11-09 21:07:57

标签: javascript animation raphael

你好 我使用Raphael框架制作了这个动画。我希望明星(logoStar)无限旋转,但它只运行一次。有人可以帮忙吗?感谢

window.onload = function () {
buildLogo();
}

var buildLogo = function () {
    var logo = Raphael("title",800,236);

    var logoStar = logo.path("M12.245 131.057L16.039 138.743L24.521 139.974L18.383 145.958L19.832 154.406L12.245 150.418L4.658 154.406L6.108 145.958L-0.03 139.974L8.452 138.743").attr({fill:"#fff",stroke:"none"});

    var starSpin = function () {
        logoStar.animate({rotation: "360"}, 5000, starSpin);
    }
    starSpin();
}

6 个答案:

答案 0 :(得分:18)

var starSpin = function () {
    logoStar.attr({rotation: 0}).animate({rotation: 360}, 5000, starSpin);
}

从360°到360°的动画看起来没有动画,所以你需要在之前将旋转重置为零。

答案 1 :(得分:6)

自从第2版问世以来,拥有无限循环动画的真正方法是:

var spin = Raphael.animation({transform: "r360"}, 2500).repeat(Infinity);
myElement.animate(spin);

Infinityproperty in Javascript,因此请勿将其作为字符串输入。

这是一个有效的fiddle

答案 2 :(得分:3)

快速观察一下:

从版本2开始看起来“旋转”不再是Atrr的一部分,所以你不能在“动画”中使用它,但你可以用“transform:”r“+(某种程度)”替换它..

例如:

 element.animate( {transform: "r" + (-90)}, 2000, 'bounce');

答案 3 :(得分:0)

我不完全确定,但是当我尝试在匿名函数中使用它时,认为 starSpin尚未定义。

尝试更改:

var starSpin = function () {
    logoStar.animate({rotation: "360"}, 5000, starSpin);
}
starSpin();

function starSpin() {
    logoStar.animate({rotation: "360"}, 5000, starSpin);
}
starSpin();

修改
事实证明,根本不是这样 - 我不知道是什么(希望有更多曝光拉斐尔图书馆的人可以提供帮助),但这是一个无用的解决方案是在回调回调中的整个构造函数之前清除有问题的元素(我警告过你它是kludgey)。

参见: http://jsfiddle.net/rbf5x/1/

答案 4 :(得分:0)

我同意迈克尔·毛,你应该把

logoStar.animate({rotation: "360"}, 5000, starSpin);

循环。

但这样的循环(真实)并不总是一个好主意。它将占用太多CPU,并且某些浏览器可能会警告用户脚本导致页面运行缓慢。也许最好在重新执行动画之前添加超时。试着看看哪种方法效果最好;)

答案 5 :(得分:-2)

我不太确定,但如果你这样做会怎么样:

while(true){starSpin();}

听起来这个方法只执行一次,所以它“旋转”一次......