#javascript #reactjs #typescript #lottie
#javascript #reactjs #typescript #лотти
Вопрос:
Я пытаюсь включить анимацию Лотти в свой проект React. Он успешно загружает компонент Lottie, но без изображений. Он не может разрешить ресурсы. Однако она доставляется мне в виде json (анимационные данные) и каталога изображений, содержащего изображения.
Я пытаюсь решить эту проблему, поместив данные json в файл javascript, этот файл js импортирует все изображения и использует эти импортированные данные в данных json. Таким образом, React определит правильный путь для этих изображений. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу правильно импортировать / обслуживать этот файл javascript в свойство animationData компонента Lottie.
Вот что у меня получилось на данный момент. И это приводит к Uncaught Error: Cannot find module '../../assets/animations/background-animation/animation.js'
BackgroundAnimation.tsx
import * as React from 'react';
import Lottie from 'react-lottie';
import animationData from '../../assets/animations/background-animation/animation.js';
export default class BackgroundAnimation extends React.Component {
constructor(props) {
super(props);
this.state = {isStopped: false, isPaused: false};
}
render() {
const defaultOptions = {
loop: true,
autoplay: true,
animationData: animationData,
rendererSettings: {
preserveAspectRatio: 'xMidYMid slice'
}
};
return <Lottie options={defaultOptions}/>
}
}
animation.js
import img_0 from './images/img_0.png'
import img_1 from './images/img_1.png'
...
export default {
"v": "5.4.4",
"fr": 30,
"ip": 0,
"op": 930,
"w": 1920,
"h": 1080,
"nm": "TV - landscape",
"ddd": 0,
"assets": [
{
"id": "image_0",
"w": 2349,
"h": 1134,
"u": "",
"p": img_0,
"e": 0
},
{
"id": "image_1",
"w": 1138,
"h": 1139,
"u": "",
"p": img_1,
"e": 0
},
...
]
}
Ответ №1:
Просто экспортируйте ее, как вы делали выше, а затем создайте компонент (я предполагаю, что вы находитесь в React) следующим образом:
import React from 'react';
import Lottie from 'react-lottie';
import animation from './animation';
const Animation = ({ animePaused }) => {
return (
<Lottie
options={{
animationData: animation,
autoplay: true
}}
height={200}
isStopped={animePaused}
/>
);
};
export default Animation;
Комментарии:
1. Это не отвечает на вопрос.