首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用react bodymovin循环动画段时的访问方法

使用react bodymovin循环动画段时的访问方法
EN

Stack Overflow用户
提问于 2019-11-25 23:22:45
回答 1查看 528关注 0票数 4

我正在使用react Bodymovin包(https://www.npmjs.com/package/react-bodymovin)嵌入Bodymovin动画,但是我想在它播放一次之后循环一段动画。

我可以看到使用Bodymovin的HTML很简单,因为您只需要使用相关的方法来完成,例如(假设div有ID bodymovin )

代码语言:javascript
复制
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组件时如何访问这些相同的方法。这是我的组成部分:

代码语言:javascript
复制
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一起工作的方式的性质,可能无法访问文件中的方法,但是如果有人知道这样做的方法,我很想听听它。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-01 14:13:50

你为什么不试试反应-洛蒂包呢?它比react-bodymovin有更多的npm下载,你可以实现你想要的东西,并播放这样的片段:

代码语言:javascript
复制
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对象,因此无法手动调用loadAnimationloadSegments等方法。但是,您可以像在普通javascript中一样使用乐天网包,就像您已经展示的那样。下面是一个如何使用钩子做出反应的例子:

代码语言: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>;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59041552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档