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 ) 
});