2.1.0 • Published 11 months ago

react-lottie-player v2.1.0

Weekly downloads
5,103
License
MIT
Repository
-
Last release
11 months ago

npm.io

Fully declarative React Lottie player

Inspired by several existing packages wrapping lottie-web for React, I created this package because I wanted something that just works and is easy to use. None of the alternatives properly handle changes of props like playing/pausing/segments. This lead to lots of hacks to get the animations to play correctly.

react-lottie-player is a complete rewrite using hooks 🎣 for more readable code, easy to use, seamless and fully declarative control of the lottie player.

Tests NPM JavaScript Style Guide

Features

Install

npm install --save react-lottie-player

Usage

import React from 'react'

import Lottie from 'react-lottie-player'
// Alternatively:
// import Lottie from 'react-lottie-player/dist/LottiePlayerLight'

import lottieJson from './my-lottie.json'

export default function Example() {
  return (
    <Lottie
      loop
      animationData={lottieJson}
      play
      style={{ width: 150, height: 150 }}
    />
  )
}

Example

🎛 Live demo

👩🏿‍💻 Example code

Lazy loading

Option 1: React code splitting (React.lazy)

Extract your Lottie animation into a separate component, then lazy load it:

// MyLottieAnimation.jsx

import Lottie from 'react-lottie-player';
import animation from './animation.json';

export default function MyLottieAnimation(props) {
  return <Lottie animationData={animation} {...props} />;
}

// MyComponent.jsx

import React from 'react';
const MyLottieAnimation = React.lazy(() => import('./MyLottieAnimation'));

export default function MyComponent() {
  return <MyLottieAnimation play />;
}

Option 2: dynamic import with state

const Example = () => {
  const [animationData, setAnimationData] = useState<object>();

  useEffect(() => {
    import('./animation.json').then(setAnimationData);
  }, []);

  if (!animationData) return <div>Loading...</div>;
  return <Lottie animationData={animationData} />;
}

Option 3: path URL

const Example = () => <Lottie path="https://example.com/lottie.json" />;

Imperative API (ref)

const lottieRef = useRef();

useEffect(() => {
  console.log(lottieRef.current.currentFrame);
}, [])

return <Lottie ref={lottieRef} />;

See also #11

LottiePlayerLight

The default lottie player uses eval. If you don't want eval to be used in your code base, you can instead import react-lottie-player/dist/LottiePlayerLight. For more discussion see #39.

Lottie animation track scrolling div

See example/App.jsx (ScrollTest) in live example.

Resize mode: cover

If you want the animation to fill the whole container, you can pass this prop. See also #55:

<Lottie rendererSettings={{ preserveAspectRatio: 'xMidYMid slice' }} />

API

See PropTypes and lottie-web.

Releasing

  • Commit & wait for CI tests
  • np

Credits

License

MIT © mifi


Made with ❤️ in 🇳🇴

More apps by mifi.no

Follow me on GitHub, YouTube, IG, Twitter for more awesome content!

bling_webapp_components6@infinitebrahmanuniverse/nolb-react-locurbo-components-library@everything-registry/sub-chunk-2565wisp-react-sdkwallet-growebstudio-muispeak-up-v4@dryprogrammer/lottie-test@clutch-marketplace/react-lottie-player@cryption/dapp-factory-sdk@cosmotech/ui@dolbyio/media-uikit-react@blocklet/launcher-workflowiyt-ui-bookiota-react-components@choclab/weave-gitopsstevennguyenbaotrunghcmq9ui-kit-roi4@arcblock/ux@alexprieudev/lottie@agney/react-dark-mode-toggle@bigbroindia/auth@fenix.finance/uikit@gravis.finance/uikit@edu-tosel/design@euax/message-chat@geobuff/buff-ui@layerzerolabs/stargate-ui@leafygreen-ui/loading-indicator@lottuseducation/technical-components@lottus-ed/components@lottuseducation/atoms@lottuseducation/design_system@lottuseducation/molecules@lottuseducation/organisms@mproffitt/weave-gitops@inbrands/plugin-overlay@ignisign/capacitor@kanalabs/transfer-widget@pawritharya/slice-tree@pawritharya/ui-library@pillardevelopment/uikit@solace-health/ui@siteone/media-librarymint-nft-danizeanreact-dark-mode-toggle-vardans-editreact-dark-mode-utilreact-dark-mode-togglereact-dark-mode-toggle-2sabpaisa-pgs4-frontend-uipg-test-projectprieu-lottieprivate-ui-libreact-video-custom-overlayshreyas-compshu-ui-libgyu-uihazley-uihazoe-uihealth-hero-animation-test@wavemaker/app-rn-runtime@waiin/raaghu-react@wispfinance/react-sdk@trevorlasn/react-dark-mode-toggle-2@tanglesea/uikitame-miniapp-components-webacciojob-packagesavine-react-componentscapivara-uidapp-factory-sdk-testbitte-ai-chatbitte-test-tempgarden-components
2.1.0

11 months ago

2.0.0

1 year ago

1.5.6

1 year ago

1.5.5

2 years ago

1.5.4

2 years ago

1.5.3

2 years ago

1.5.2

2 years ago

1.5.1

2 years ago

1.5.0

3 years ago

1.4.3

3 years ago

1.4.2

3 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.3

4 years ago

1.3.2

4 years ago

1.3.1

4 years ago

1.3.0

4 years ago

1.2.0

4 years ago

1.1.1

4 years ago

1.1.0

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago