我有一个动画,希望将其用于具有以下基本状态的翻转效果:
除了在静止状态下连续循环外,我几乎可以正常工作。循环只播放一次,然后静止。我的代码如下:
Codepen:https://codepen.io/anon/pen/pBXKeN
var animationContainer = document.getElementById("animation-container");
var animation = lottie.loadAnimation({
wrapper: document.getElementById("animation-wrapper"),
renderer: "svg",
loop: false,
autoplay: false,
prerender: true,
animationData: animationData,
});
animation.addEventListener('DOMLoaded',resting);
animationContainer.addEventListener("mouseenter", hoverStart);
animationContainer.addEventListener("mouseleave", hoverEnd);
function resting() {
animation.removeEventListener("complete", resting);
console.log('resting');
animation.playSegments([0, 55], true);
}
function hoverStart() {
console.log('hover started');
animationContainer.removeEventListener("mouseenter", hoverStart);
animation.playSegments([56, 78], true);
animationContainer.addEventListener("mouseleave", hoverEnd);
}
function hoverEnd() {
console.log('hover ended');
animationContainer.removeEventListener("mouseleave", hoverEnd);
animation.playSegments([79, 95], true);
animation.addEventListener("complete", resting);
animationContainer.addEventListener("mouseenter", hoverStart);
}
我尝试将loop设置为true,但这会导致所有3个状态循环,这对于mouseenter和mouseleave效果不是理想的效果。有没有办法让单个部分循环?
如果让事情变得更简单,我也很高兴切换到jQuery。
答案 0 :(得分:0)
通过将循环设置为true来解决,在2帧之间循环以获得“暂停”效果,并更紧密地监视悬停状态。我相信这可以进一步改善,但是目前我很高兴它能正常工作。
更新的Codepen:https://codepen.io/matt3/pen/NVxWYJ
var hover = false;
animationContainer.addEventListener("mouseenter", hoverStart);
animation.addEventListener('DOMLoaded',resting);
function resting() {
console.log('resting. hover status: ' + hover);
animation.removeEventListener("loopComplete", resting);
animation.playSegments([0, 55], true);
}
function hoverStart() {
console.log('hover started. hover status: ' + hover);
animationContainer.removeEventListener("mouseenter", hoverStart);
animation.playSegments([56, 78], true);
animation.addEventListener("loopComplete", hoverPause);
}
function hoverPause() {
console.log('hover paused. hover status: ' + hover);
animation.removeEventListener("loopComplete", hoverPause);
animationContainer.addEventListener("mouseleave", hoverEnd);
animation.playSegments([77, 78], true);
console.log('hover pause complete. hover status: ' + hover);
if (!hover) {
animation.addEventListener("loopComplete", hoverEnd);
}
}
function hoverEnd() {
console.log('hover ended. hover status: ' + hover);
animationContainer.removeEventListener("mouseleave", hoverEnd);
animation.removeEventListener("loopComplete", hoverEnd);
animation.playSegments([79, 95], true);
animation.addEventListener("loopComplete", resting);
animationContainer.addEventListener("mouseenter", hoverStart);
}
animationContainer.onmouseout = function () {
hover = false;
}
animationContainer.onmouseover = function () {
hover = true;
}