HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🚪
Web Animation 2부 js Animation
/
👾
ch6 - 2. animation 이벤트
👾

ch6 - 2. animation 이벤트

Index
1. 클릭 이벤트로 애니메이션 추가하기2. animationstart3. animationend

1. 클릭 이벤트로 애니메이션 추가하기

이번 장에서는 애니메이션과 이벤트를 연결하는 방법을 배워보겠습니다. 우선 이번에 사용할 HTML 코드를 아래와 같이 준비해봤습니다. 이제 귀여운 냥이 한 마리가 화면에 나타날 것입니다. 아직은 아무런 동작도 하지 않습니다.
<!DOCTYPE html> <html lang="en"> <head> <style> .cat{ width:98px; height:136px; background-image: url("images/cat_idle.png"); background-size: contain; font-size:1px; /* 요소의 텍스트를 숨기기 위한 코드입니다. */ color: transparent; /* 요소의 텍스트를 숨기기 위한 코드입니다. */ } /* catWalk 클래스가 추가될 경우 이미지를 바꿉니다. */ .cat.catWalk{ background-image: url("images/cat_walk.gif"); } /* catAni 애니메이션을 정의합니다. */ @keyframes catAnimation{ from{ transform: translate(0, 0); } to{ transform: translate(300px, 0); } } /* catAni 클래스를 가진 경우 catAnimation 애니메이션을 실행합니다. */ .catAni{ animation: catAnimation 1s 2 alternate forwards; } </style> </head> <body> <div class="cat">냥이</div> </body> </html>
이제 스크립트를 추가해 봅시다. 냥이를 클릭하면 catAni 클래스가 붙어서 catAnimation 애니메이션이 작동할 겁니다. 이렇게 클래스에 애니메이션을 정의하고 addEventListener를 통해 이벤트를 등록하는 것이 가능합니다.
<script> const cat = document.querySelector(".cat"); cat.addEventListener('click', () => { cat.classList.add("catAni"); }); </script>

2. animationstart

addEventListener에는 animationstart라는 이벤트 유형이 존재합니다. animationstart은 타겟 요소에 등록된 애니메이션이 시작될 때를 감지합니다.
<script> const cat = document.querySelector(".cat"); cat.addEventListener('click', () => { cat.classList.add("catAni"); }); cat.addEventListener('animationstart', () => { cat.classList.add("catWalk"); }); </script>
위와 코드를 살펴봅시다. 애니메이션이 시작될 때 cat 요소에 catWalk라는 클래스를 추가합니다. catWalk 클래스를 통해 기존의 'cat_idle.png' 파일 위에 'cat_walk.gif' 파일 덮어 씌워지면서 냥이가 걸어가는 이미지로 바뀌게 됩니다. 이제 냥이를 클릭하면 이동하는 동시에 걷는 동작을 보여줄 겁니다.

3. animationend

addEventListener에는 animationend라는 이벤트 유형도 존재합니다. 이름에서 알 수 있듯 animationend는 타겟 요소에 등록된 애니메이션이 끝날 때를 감지합니다.
<script> const cat = document.querySelector(".cat"); cat.addEventListener('click', () => { cat.classList.add("catAni"); }); cat.addEventListener('animationstart', () => { cat.classList.add("catWalk"); }); cat.addEventListener('animationend', () => { cat.classList.remove("catAni", "catWalk"); }); </script>
위의 코드에서는 animationend를 통해 애니메이션이 끝나면 'catAni' 와 'catWalk' 클래스를 요소에서 제거합니다. 이렇게 되면 냥이가 되돌아온 후에 다시 정지한 이미지로 바뀌게 되고, 애니메이션도 제거되기 때문에 다시 냥이를 클릭했을 때 애니메이션을 또 재생 시킬 수 있게 됩니다. 이렇게 클릭하면 발을 구르며 잠시 오른쪽을 다녀오는 냥이를 만들어 보았습니다.