[javascript] Storybook과 자바스크립트 애니메이션 라이브러리 통합

Storybook은 개발자들이 사용자 인터페이스(UI) 컴포넌트를 독립적으로 개발 및 테스트할 수 있는 오픈 소스 도구입니다. 반면 자바스크립트 애니메이션 라이브러리는 사용자 인터페이스에 동적인 애니메이션 효과를 부여하기 위해 사용하는 도구입니다. 이 두 가지를 통합하면 개발자는 Storybook에서 컴포넌트를 테스트하면서 동시에 애니메이션 효과를 확인할 수 있습니다.

Storybook 설정

Storybook에서 자바스크립트 애니메이션 라이브러리를 사용하기 위해서는 몇 가지 설정이 필요합니다. 우선 Storybook 프로젝트의 package.json 파일에 해당 애니메이션 라이브러리에 대한 종속성을 추가해야 합니다. 예를 들어, GreenSock Animation Platform (GSAP)를 사용한다고 가정해보겠습니다.

"dependencies": {
    "gsap": "^3.0.0"
}

또한 Storybook의 원하는 위치에 컴포넌트 스토리 파일을 생성해야 합니다. 예를 들어, src/stories 폴더에 Button.stories.js 파일을 생성할 수 있습니다.

import React from 'react';
import { action } from '@storybook/addon-actions';
import Button from '../components/Button';

export default {
  title: 'Button',
  component: Button,
};

export const Default = () => <Button onClick={action('clicked')}>Click me!</Button>;

애니메이션 효과 추가

Storybook에서 애니메이션 효과를 추가하려면 해당 라이브러리를 사용하여 컴포넌트를 래핑해야 합니다. GSAP의 경우, 다음과 같은 방법으로 Button 컴포넌트를 애니메이션 효과를 추가할 수 있습니다.

import React from 'react';
import { action } from '@storybook/addon-actions';
import { gsap } from 'gsap';
import Button from '../components/Button';

export default {
  title: 'Button',
  component: Button,
};

export const Default = () => {
  const animateButton = () => {
    gsap.to(buttonRef, { scale: 1.2, duration: 0.3, onComplete: () => buttonRef.style.transform = '' });
  };

  const buttonRef = React.useRef();

  return (
    <Button onClick={() => {
      action('clicked');
      animateButton();
    }} ref={buttonRef}>
      Click me!
    </Button>
  );
};

위의 예제에서는 GSAP의 to 메서드를 사용하여 버튼의 크기를 1.2배로 확대한 다음, 0.3초 동안 원래 크기로 복원하도록 효과를 만들었습니다. onComplete 콜백 함수를 사용하여 애니메이션이 종료될 때 원래의 변환을 제거합니다.

Storybook 실행

이제 Storybook을 실행하여 컴포넌트와 애니메이션 효과를 확인할 수 있습니다. 다음 명령어를 실행하여 Storybook을 시작하세요.

yarn storybook

Storybook이 실행되면 웹 브라우저에서 확인할 수 있는 로컬 개발 서버가 시작됩니다. 버튼 컴포넌트를 클릭하면 애니메이션 효과가 적용된 버튼을 볼 수 있습니다.

결론

Storybook과 자바스크립트 애니메이션 라이브러리를 통합하면 개발자는 컴포넌트를 개발하고 테스트하는 동안 동적인 애니메이션 효과를 시각적으로 확인할 수 있습니다. 이를 통해 개발자는 좀 더 유연하고 상호작용적인 사용자 경험을 구현할 수 있습니다.

참고 자료