【发布时间】:2015-06-29 18:05:35
【问题描述】:
我正在使用 Snap.svg 为 13 个 SVG 制作动画。所有的 SVG 都从一个点开始,并通过其他几个动画(通过回调)进行动画处理。下面用代码描述了我的动画的简化示例:
var reset = function(person) {
person.attr({transform: 't0,0', opacity: 0});
animatePerson(person);
};
var animatePerson = function(person) {
person.animate({opacity: 1}, 300, null,function() {
person.animate({transform: 't100,20'}, 1000, null, function() {
person.animate({opacity: 0}, 300, null, function() {
reset(person);
});
});
});
};
var people = [Snap('#Person_1'), Snap('#Person_2'), Snap('#Person_3'), Snap('#Person_4'), Snap('#Person_5')];
我的第一次尝试是映射数组并为第一个动画设置超时,如下所示:
people.map(function(person, index) {
setTimeout(function() {
animatePerson(person);
}, (300*index));
});
但这不起作用,因为 SVG 在循环时会开始相互重叠/超越。然后我尝试将超时设置为动画的一个完整“圈”所花费的时间长度,并将其除以 SVG 的总数,如下所示:
people.map(function(person, index) {
setTimeout(function() {
animatePerson(person);
}, (1600/people.length));
});
在 Snap.svg 或 JavaScript 中是否有一种方法可以使用回调和/或超时来实现动画循环,或者我在这里?
这是我所指的完整动画的图像:
【问题讨论】:
-
无关说明:
Array.prototype.map用于通过操作数组中的现有元素来创建新数组。如果您只想遍历数组,请使用Array.prototype.forEach使您的意图更清晰(并避免创建 map 生成的额外数组)
标签: javascript snap.svg