我正在使用react Bodymovin包(https://www.npmjs.com/package/react-bodymovin)嵌入Bodymovin动画,但是我想在它播放一次之后循环一段动画。
我可以看到使用Bodymovin的HTML很简单,因为您只需要使用相关的方法来完成,例如(假设div有ID bodymovin )
const params = {
container: document.getElementById('bodymovin'),
renderer: 'svg',
loop: false,
autoplay: false,
animationData: animationData,
}
const anim = bodymovin.loadAnimation(params)
anim.playSegments([[0, 65]], true)但是,我不知道在使用React组件时如何访问这些相同的方法。这是我的组成部分:
import React from 'react'
import ReactBodymovin from 'react-bodymovin'
import animation from './animation.json'
const App = () => {
const bodymovinOptions = {
loop: true,
autoplay: true,
prerender: true,
animationData: animation
}
return (
<div>
<ReactBodymovin options={bodymovinOptions} />
</div>
)
}我有一种感觉,由于这个React包装器与Bodymovin一起工作的方式的性质,可能无法访问文件中的方法,但是如果有人知道这样做的方法,我很想听听它。谢谢。
发布于 2019-12-01 14:13:50
你为什么不试试反应-洛蒂包呢?它比react-bodymovin有更多的npm下载,你可以实现你想要的东西,并播放这样的片段:
import React from 'react'
import animation from './animation.json'
import Lottie from 'react-lottie';
const App = () => {
const options= {
loop: true,
autoplay: true,
prerender: true,
animationData: animation
}
return (
<div>
<Lottie options={options} segments={[0, 65]} />
</div>
)
}但是,使用这两个包,您将无法完全控制lottie对象,因此无法手动调用loadAnimation或loadSegments等方法。但是,您可以像在普通javascript中一样使用乐天网包,就像您已经展示的那样。下面是一个如何使用钩子做出反应的例子:
import React, { useEffect, useRef } from "react";
import lottie from "lottie-web";
import animation from "./animation.json";
const App = () => {
const animContainer = useRef<HTMLDivElement>(null);
useEffect(() => {
if (ref.current) {
const anim = lottie.loadAnimation({
container: animContainer.current,
renderer: "svg",
loop: true,
autoplay: true,
animationData: animation
});
anim.playSegments([[0, 65]], true);
}
});
return <div ref={animContainer}></div>;
}https://stackoverflow.com/questions/59041552
复制相似问题