在输入上启动/停止js动画时间轴的最佳方法是什么

时间:2018-05-08 12:16:34

标签: javascript input anime.js

我正在尝试创建一个动画(使用anime.js),该动画在用户开始输入时播放一次动画时间轴,并在用户输入框中输入的时间内循环。当用户停止输入时,动画将完成其当前循环并停止播放。

这是我目前的进展,你可以观察动画工作不正确:https://codepen.io/andrewbentley/full/XqMrze

这是我的anime.js代码时间轴:

var basicTimeline = anime.timeline({
  loop: true,
  autoplay: false,
  duration: 700
});

basicTimeline
  .add({
    targets: '#circ1',
    duration: 100,
    translateY: -10,
    easing: 'easeInQuad' 
  })
  .add({
    targets: '#circ1',
    duration: 100,
    translateY: 0,
    easing: 'easeInQuad'
  })
  .add({
    targets: '#circ2',
    duration: 100,
    translateY: -10,
    easing: 'easeInQuad'
  })
  .add({
    targets: '#circ2',
    duration: 100,
    translateY: 0,
    easing: 'easeInQuad'
  })
  .add({
    targets: '#circ3',
    duration: 100,
    translateY: -10,
    easing: 'easeInQuad'
  })
  .add({
    targets: '#circ3',
    duration: 100,
    translateY: 0,
    easing: 'easeInQuad'
   })
  .add({
    targets: '#circ3',
    delay: 100
});

document.querySelector('#email').onkeypress = basicTimeline.play;
document.querySelector('#email').onkeyup = basicTimeline.pause;

是否有人能够告诉我在使用anime.js时间轴实用程序和使用事件监听器(如onkeypressonkeyup等)时获得所需效果的最佳方法。

1 个答案:

答案 0 :(得分:0)

在这里提出了在当前循环结束时停止动画的问题: on github那里有一些好的建议。

也许最好的是Edrees Jalili

function pausableLoopAnime({loopComplete, ...options}) {
  const instance = anime({
    ...options,
    loop: true,
    loopComplete: function(anim) {
        if(instance.shouldPause) anim.pause();
        if(typeof loopComplete === 'function') loopComplete(anim);
    }
  });
  instance.pauseOnLoopComplete = () => instance.shouldPause = true;
  return instance;
}

const animation= pausableLoopAnime({
  targets: '.polymorph',
  points: [
      { value: '215, 110 0, 110 0, 0 47.7, 0 67, 76' },
      { value: '215, 110 0, 110 0, 0 0, 0 67, 76' }
  ],
  easing: 'easeOutQuad',
  duration: 1200,
});

setTimeout(animation.pauseOnLoopComplete, 100)