Post

GSAP에 대해

안녕하세요. 오늘은 필자가 GSAP를 처음 사용해봐서 GSAP에 대해 정리한 글입니다

포스팅에 앞서 필자도 부족한 부분이 많으니 양해 부탁드립니다.

GSAP란?

GSAP(GreenSock Animation Platform)은 HTML, CSS 및 JavaScript를 사용하여 웹 애니메이션을 구현하기 위한 강력한 라이브러리입니다. GSAP은 애니메이션을 제어하고 관리하기 위한 다양한 기능과 직관적인 API를 제공하여 웹 개발자들이 복잡한 애니메이션을 쉽게 구현할 수 있도록 도와줍니다.

GSAP의 주요 기능과 이점

  1. 간단하고 직관적인 구문: GSAP은 간단하고 직관적인 구문을 제공하여 복잡한 애니메이션을 쉽게 작성할 수 있습니다. TweenMax, TimelineMax 등의 모듈을 사용하여 다양한 애니메이션 효과를 적용할 수 있습니다.

  2. 브라우저 호환성: GSAP은 모든 주요 브라우저에서 작동하며, 네이티브 CSS 속성을 활용하여 애니메이션을 구현합니다. 플래시 플러그인과 같은 추가 요소 없이도 쉽게 사용할 수 있습니다.

  3. 풍부한 애니메이션 기능: GSAP은 다양한 애니메이션 유형을 지원하고, 텍스트, SVG, 캔버스 등 다양한 요소에 애니메이션을 적용할 수 있습니다. 이동, 회전, 크기 조절, 투명도 변경 등 다양한 속성을 애니메이트할 수 있습니다.

  4. 뛰어난 성능과 최적화: GSAP은 웹 애니메이션의 부드러운 실행과 최적화된 성능을 제공하여 사용자 경험을 향상시킵니다. GPU 가속을 통해 고성능 애니메이션을 구현할 수 있습니다.

최근 GSAP 업데이트 내용 (2022년 1월 이후 기준)

GSAP은 지속적으로 업데이트되며, 최근 업데이트 중 일부 주요 변경 사항은 다음과 같습니다:

  1. GSAP 3: GSAP 3 버전에서는 성능과 유연성이 향상되었습니다. 애니메이션 동작이 더 부드럽고 자연스러워졌으며, 자바스크립트 모듈 시스템과의 통합이 개선되었습니다.

  2. 모션 경로 애니메이션: GSAP 3에서는 SVG나 DOM 요소의 모션 경로를 따라 애니메이션을 만들 수 있는 기능이 추가되었습니다.

  3. SplitText 플러그인: 텍스트를 문자 또는 단어로 분리하여 개별적으로 애니메이션을 적용할 수 있는 SplitText 플러그인이 도입되었습니다.

  4. PixiJS 통합: GSAP과 PixiJS를 통합하여 Canvas 기반의 고성능 애니메이션을 더욱 쉽게 구현할 수 있게 되었습니다.

  5. 스크롤 트리거 애니메이션: ScrollTrigger 플러그인이 도입되어 스크롤 위치에 따라 애니메이션을 트리거할 수 있게 되었습니다.

GSAP와 ScrollTrigger를 함께 사용하기

GSAP와 ScrollTrigger를 함께 사용하면 스크롤 이벤트에 따라 동적인 애니메이션을 쉽게 추가할 수 있습니다. ScrollTrigger를 사용하여 스크롤 위치에 따라 애니메이션을 트리거하고, GSAP을 사용하여 애니메이션을 정의하고 제어할 수 있습니다. 이를 통해 사용자에게 멋진 인터랙티브 웹 경험을 제공할 수 있습니다.

이제 GSAP를 활용한 예쩨를 보여드리겠습니다.

GSAP 및 ScrollTrigger를 사용한 애니메이션 예제

이 예제는 세 개의 섹션을 가진 웹 페이지에서 각 섹션의 요소들이 스크롤에 따라 나타나는 애니메이션을 구현하는 방법을 보여줍니다.

HTML 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>GSAP & ScrollTrigger Example</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="section" id="section1">
        <h1 class="title">Section 1</h1>
        <p>This is the content of section 1.</p>
    </div>
    <div class="section" id="section2">
        <h1 class="title">Section 2</h1>
        <p>This is the content of section 2.</p>
    </div>
    <div class="section" id="section3">
        <h1 class="title">Section 3</h1>
        <p>This is the content of section 3.</p>
    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/ScrollTrigger.min.js"></script>
    <script src="scripts.js"></script>
</body>
</html>

CSS 스타일 (styles.css)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
}

.section {
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #f0f0f0;
    text-align: center;
    opacity: 0; /* 초기에는 숨김 */
}

.title {
    font-size: 3em;
    color: #333;
    opacity: 0;
}

JavaScript 애니메이션 설정 (scripts.js)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// GSAP 플러그인 및 기능 불러오기
const { gsap } = window;
const { ScrollTrigger } = window;

// 각 섹션의 제목 요소에 fadeIn 애니메이션 및 ScrollTrigger 트리거 설정
gsap.utils.toArray('.section').forEach(section => {
    const title = section.querySelector('.title');
    const content = section.querySelector('p');

    gsap.from(title, {
        opacity: 0,
        y: 50,
        duration: 1,
        scrollTrigger: {
            trigger: section,
            start: 'top 80%', // 스크롤 위치
            toggleActions: 'play none none reverse' // 트리거 액션 설정
        }
    });

    gsap.from(content, {
        opacity: 0,
        y: 50,
        duration: 1,
        scrollTrigger: {
            trigger: section,
            start: 'top 80%', // 스크롤 위치
            toggleActions: 'play none none reverse' // 트리거 액션 설정
        }
    });
});

// 전체 섹션의 fadeIn 효과 설정
gsap.to('.section', {
    opacity: 1,
    duration: 1,
    scrollTrigger: {
        trigger: '.section:first-child',
        start: 'top 80%', // 스크롤 위치
        toggleActions: 'play none none reverse' // 트리거 액션 설정
    }
});

설명

  • JavaScript 애니메이션 설정:
    • 각 섹션(.section) 요소의 제목(.title)과 내용(p)에 대한 fadeIn 애니메이션을 설정합니다.
    • gsap.from()을 사용하여 요소들의 초기 상태를 정의하고, ScrollTrigger를 통해 스크롤 위치에 따라 애니메이션을 트리거합니다.
    • 전체 섹션에 대한 fadeIn 효과를 적용하여 페이지가 로드될 때 전체 섹션들이 순차적으로 나타나도록 합니다.

이 예제는 각 섹션의 제목과 내용이 스크롤에 따라 부드럽게 나타나는 애니메이션을 구현합니다. ScrollTrigger를 사용하여 트리거 위치를 조정하고, GSAP을 활용하여 애니메이션을 쉽게 제어할 수 있습니다.

GSAP과 ScrollTrigger의 더 많은 기능과 사용법은 공식 문서(https://greensock.com/docs/)를 참조하시기 바랍니다. 이를 통해 웹 애니메이션을 효과적으로 구현하고 사용자 경험을 향상시킬 수 있습니다.

오늘도 필자의 부족한 글 읽어주셔서 감사합니다.

This post is licensed under CC BY 4.0 by the author.