Javascript 事件不适用于 Element.animate()

Javascript events not working with Element.animate()

我正在尝试使用 Javascript 中的 Element.animate() 方法向我的网站添加动画,但我意识到当动画为 运行 时不会触发动画事件。

这是我的代码:

window.onload = function () {
  let list = document.querySelector(".list");
  let btn = document.querySelector(".btn");

  // animation events
  list.addEventListener('animationstart', () => {
    console.log('start')
  });

  list.addEventListener('animationend', () => {
    console.log('end');
  });


  btn.onclick = () => {
    list.animate([
      // keyframes
      { transform: 'translateY(0px)' },
      { transform: 'translateY(-24px)' }
    ], {
      // timing options
      duration: 1000,
      fill: "forwards"
    });
  }

}

在上面的代码中,动画运行但没有触发动画事件。谁能解释为什么这不起作用或告诉我如何解决它?

您没有使用 CSS 动画(由 css 类 触发)。 animationstart/end(或transitionstart/end)事件仅在使用CSS定义的动画或-transition时触发。

查看 HTMLElement: animationstart event 中的示例。

您可以直接访问 Animation 实例,而不是 start/end-events:

btn.onclick = () => {
  // animation started
  let animation = list.animate(...);
  animation.onfinish = () => {
    // animation ended
  };
};