SnapSVG动画回调的一组元素不触发
SnapSVG animation callback on set of elements not firing
参见
我想动画一组元素,并执行回调完成时,像这样:
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();
}
}
)
})
}
我将尝试回答几个问题,尽管我不确定是否与回调有关。如果没有像jsfiddle这样的适当测试,很难判断它是否只是示例代码。
但是,上面的代码中至少有两个问题。
用
创建矩阵new Snap.Matrix(); // as opposed to Snap.matrix()
也elements.animate()
这里的问题是animate作用于一个元素(edit:看起来它可以在一个集合中的元素上工作,但不是回调作为例子在这里,edit2:回调集现在可能被支持),而不是多个元素(你有时可以应用一些东西到一个单独处理它们的集合,但据我所知,这不是与动画的情况)。
所以你要么写
elements.forEach( function(el) { el.animate({blah: value}, 2000, mina.linear.callback )
});
或者如果它是一个svg组(而不是一个集合),原始代码可能会工作(但我将其称为'myGroup'或其他东西,而不是'elements',以便代码可读性和猜测它包含什么)
fiddle(已经包含了一个不同的动画使用snap动画字符串)
相关文章:
- 我们怎样才能将内含子J用于一组特定的元素
- 创建一组元素JointJS
- 使用第 n 个类型设置一组八个元素的样式
- 如何检查焦点是否离开了一组元素
- 是否可以加快向DOM添加一组元素的速度
- 使用javascript在一组元素上切换类
- JavaScript-更改一组包含特定文本和变量ID元素的链接
- 如何使用jQuery查找一组元素的父元素
- 为什么 .data() 适用于一组元素,但不适用于单个元素
- 如何从一组元素中获取 ID 并保存在数组中
- 使一组元素透明,但一个除外
- 当一组元素的所有元素都具有特定值时,如何隐藏表单元素
- 如何在一组元素上触发事件
- 使用 JavaScript 从 HTML 元素中删除一组特定的事件侦听器
- JQuery:用另一组元素替换一组元素的优雅方式
- 如何使用 jquery 隐藏下一组元素
- 使用 Raphael JS 一次缩放一组元素
- 循环遍历一组元素 jQuery
- 如何仅访问数组中的一对元素一次
- 如何包装属于一个类的一组元素以适应其父元素