Lottie Animation 리액트 프로젝트에 적용하기


리액트에서 사용 가능한 lottie 모듈 중 lottie-react 를 사용하였다.
어떤 목적으로 사용하는지에 따라 다르겠지만 토글버튼을 사용하기 위해서 프레임 조정 기능을 지원하는 모듈이 필요했다.

react-lottie



playSegments(segments, forceFlag)

{
segments: [start, stop],
forceFlag: true,
}


segments
Array타입
첫번째, 두번째 인덱스에는 각각 시작 프레임과 정지프레임을 넣어준다. ex. [0, 1]

forceFlag
Boolean 타입
false일 경우, 현재 세그먼트가 완료될 떄까지 기다린다.
true일 경우, 세그먼트 값을 바로 업데이트 한다. (인자를 true로 넘겨줘야 토글이 제대로 동작한다)

프레임 지정

ON(멈춤)ON → OFF(이동)OFF(멈춤)OFF → ON(이동)
[0, 1][0, 전체프레임/2][전체프레임/2, 전체프레임/2 + 1][전체프레임/2, 전체프레임]



lottie-React

Componenet, Hook 2가지 타입으로 import해서 사용이 가능하다. 여기서는 Hook을 사용했다.

👉 Hook의 사용

 const style = {
    height: 36,
    width: 60,
  };
  const options = {
    loop: false,
    autoplay: false,
    animationData: jsonData,
    rendererSettings: {
      preserveAspectRatio: 'xMidYMid slice',
    },
  };

const { View, playSegments, setSpeed } = useLottie(options, style);


👉 jsx 리턴

  /*
   View의 형태는 아래와 같다. lottie-react github 참고
    const View = <div style={style} ref={animationContainer} {...rest} />;
  */
  
  return (
    <Wrapper
      onClick={onToggleHandler}>
      {View}
    </Wrapper>
  );



👉 State 관리 및 playSegments의 사용

const state = useLocalObservable(
  (): IState => ({
    sequence: {
      segments: initialSegments,
      forceFlag: true,
    },
    setSequence(start: number, stop: number) {
      state.sequence = {
        segments: [start, stop],
        forceFlag: true,
      };
      playSegments([start, stop], true);
    },
  })
);



Reference.

https://betterprogramming.pub/how-to-use-manipulate-airbnbs-lottie-animations-in-react-6e63b94012ca
https://lottiereact.com
https://github.com/Gamote/lottie-react

· react, lottie, animation, typescript