动画触发事件从 lottie-web 开始

Trigger event on animation start with lottie-web

我目前正在开发一个 next.js 应用程序,我的目标是制作一个带声音的“问候动画”。

我在动画开始时触发事件时遇到问题,所以我可以同步开始音乐。

这是我的代码,显示动画但不记录任何内容:

import React, { useEffect, useRef } from "react";
import lottie from "lottie-web";

function App() {
  const container = useRef(null);

  useEffect(() => {
    lottie.loadAnimation({
      container: container.current,
      renderer: "svg",
      loop: false,
      autoplay: true,
      animationData: require("../media/lottie/greeter.json")
    });

    return () => {
      lottie.play();
    };
  }, []);

  return (
      <div className="dark-bg h-screen pointer-events-none"
        ref={container}
        onAnimationStart={() =>console.log("test")}
      />
  );
}

export default App;

感谢任何帮助!

当您自动播放动画时,您可以监听“DOMLoaded”事件,或者如果您想要“enterFrame”事件,然后忽略对回调的后续调用,因为它会在您播放的每一帧上调用动画。

我发现了问题所在。我以错误的方式添加了事件,不得不使用“DOMLoaded”事件。

这对我有用:

import React, { useEffect, useRef } from "react";
import lottie from "lottie-web";

function App() {
  const container = useRef(null);

  useEffect(() => {
    const anim = lottie.loadAnimation({
      container: container.current,
      renderer: "svg",
      loop: false,
      autoplay: true,
      animationData: require("../media/lottie/greeter.json")
    });

    anim.addEventListener('complete', function(e) { console.log('element ended'); });
    anim.addEventListener('DOMLoaded', function(e) { console.log('element loaded'); });

    return () => {
      lottie.play();
    };
  }, []);

  return (
      <div className="dark-bg h-screen pointer-events-none"
        ref={container}
      />
  );
}

export default App;