我正在尝试使图标在单击时具有动画效果。我希望动画在重新启动之前完成。
我首先通过选择元素来构建我的图标,然后使用它们的 id 通过路径选项加载动画数据:
var icon_containers = document.querySelectorAll('div.icon');
var icons = [];
function buildIcons() {
for (var i = 0; i < icon_containers.length; i++) {
element = icon_containers[i];
if (element.id !== '') {
var params = {
container: element,
renderer: 'svg',
loop: false,
autoplay: false,
path: element.id + '.json'
};
var anim = bodymovin.loadAnimation(params);
icons.push({
anim: anim,
element: element,
isPlaying: false
});
}
}
}
buildIcons();
然后循环图标对象并调用 animationStart 方法以及添加到每个图标容器的单击处理程序:
function startAnimation(anim, icon) {
anim.setDirection(1);
anim.goToAndStop(1);
anim.play();
// This seems to fire immediately, before the icon has completed its animation?
anim.addEventListener('loopComplete', complete(icon));
}
buildIcons();
icons.forEach(function(value, id) {
startAnimation(value.anim, id);
value.element.addEventListener("click", function(e) {
startAnimation(value.anim, id);
});
});
startAnimation 方法尝试附加一个事件处理程序以在 loopComplete 事件发生时触发。
function complete(icon) {
console.log(icon + ' loopComplete');
}
但是,这似乎会立即触发,我想知道如何在动画之后触发它,这样我才能在它完成之前开始新的动画。
我在这里做了一个简化的测试用例:https ://codepen.io/paulyabsley/project/editor/ALEWnK
bodymovin.js 的文档:https ://github.com/bodymovin/bodymovin