Javascript 未触发的元素集上的SnapSVG动画回调
瞧 我想制作一组元素的动画,并在完成时执行回调,如下所示:Javascript 未触发的元素集上的SnapSVG动画回调,javascript,animation,vector,svg,snap.svg,Javascript,Animation,Vector,Svg,Snap.svg,瞧 我想制作一组元素的动画,并在完成时执行回调,如下所示: s.selectAll('.active').animate( { transform: matrix }, 300, mina.linear, function() { //callback doesnt fire alert('callback') } ) 元素已正确设置动画,但未执行回调 但是,当我将动画应用于一组元素时,将触发回调: grou
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和counting设置一组元素的动画:
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();
}
}
)
})
}
我将尝试回答几个问题,尽管我不确定是否与回调有关。如果没有像JSFIDLE这样的适当测试,很难判断它是否只是示例代码 但是,上面的代码中至少有两个问题 创建一个矩阵是非常困难的
new Snap.Matrix(); // as opposed to Snap.matrix()
也
这里的问题是,animate作用于一个元素(edit:看起来它可以作用于一个集合中的元素,但不能作用于回调,例如这里的edit2:现在可能支持对集合的回调),而不是多个元素本身(有时你可以将一些东西应用到一个集合中,单独处理它们,但据我所知,动画不是这样的)
所以你要么想做一个
elements.forEach( function(el) { el.animate({blah: value}, 2000, mina.linear.callback )
});
或者,如果它是一个svg组(与集合相反),那么原始代码可能会工作(但为了代码可读性和猜测它包含的内容,我会称它为“myGroup”或其他东西,而不是“elements”)
(包含使用快照动画字符串的不同动画)如果可能,尝试将其放在小提琴上。动画是否运行,控制台日志中是否有任何内容?是的,动画是否运行,console.log已清除。当我在hideToPoint()中记录回调参数时,回调参数传递正确。整理一把小提琴需要一点时间,因为这是一件更大的事情的一部分,我会在我开始做的时候编辑这篇文章。看这个来创建你的例子:我用更清晰的例子和一些新的见解重新表述了问题。非常感谢你的回答。看起来你键入它就像我重新表述问题一样。看起来这解决了我的问题问题:您可以设置组动画,但不能设置组动画。非常感谢。@lan如果回调不起作用,为什么
set。animate
仍然提供回调参数?@lan使用set.animate
时,元素动画设置正确,但回调没有执行。实际上不确定,我有点惊讶animate实际上可以在组上工作。如果如果你认为回调可以正常工作,我可能会在github上提出问题。否则,如果可能的话,我会使用组。
elements.forEach( function(el) { el.animate({blah: value}, 2000, mina.linear.callback )
});