【发布时间】:2014-06-24 09:38:41
【问题描述】:
见JSfiddle!
我想为一组元素设置动画并在完成后执行回调:
s.selectAll('.active').animate( {
transform: matrix
},
300,
mina.linear,
function() {
//callback doesnt fire
alert('callback')
}
)
元素动画正确,但回调未执行。
但是,当我将动画应用于 组 元素时,会触发回调:
group.animate( {
transform: matrix
},
300,
mina.linear,
function() {
alert('callback')
}
)
.. 但是我不想将我选择的元素放在一个组中,因为这会在其他地方导致更多的复杂性。
是否可以对我通过 .select() 或 .selectAll() 获得的一组元素进行动画处理,同时能够触发回调?
提前非常感谢!
编辑:对于未来的读者,您可以使用 forEach 为一组元素设置动画,并计算所有元素是否都已完成动画:
function hideToPoint(elements, x, y, callback) {
var finished = 0;
elements.forEach(function(e) {
e.animate( {
//do stuff
},
300,
mina.linear,
function () {
finished++;
if (finished == elements.length) {
callback();
}
}
)
})
}
【问题讨论】:
-
如果可能的话,试着把它放在小提琴上。动画是否运行,控制台日志中有任何内容?
-
是的,动画确实运行了,console.log 是清晰的。当我在 hideToPoint() 中登录时,回调参数正确传递。
-
整理小提琴需要一些时间,因为这是一个更大的事情的一部分,我会在需要时编辑帖子。
-
看到这个来创建你的例子:stackoverflow.com/help/mcve
-
我用更清晰的例子和一些新的见解重新表述了这个问题。
标签: javascript animation vector svg snap.svg