본문 바로가기

HTML CSS JAVASCRIPT

CSS Transition 종료 후 다른 기능 실행 (자바스크립트)

300x250

CSS 로 div 에 애니메이션 효과를 준 뒤 자바스크립트로 다른 기능을 실행할 때

이것을 순차적으로 실행할 수 있게 해주는 기능입니다.

 

순서

1. div에 class를 추가하여 애니메이션 하기 (classList.add)

2. div가 애니메이션이 끝났는지 확인 (Promise 함수)

3. 다음 기능 실행하기 (얼럿창이나 하나 띄워봅시다.)

 

사전 세팅

 

CSS

<style>
    .div1{
        display: flex;
        justify-content: center;
        align-items: center;
        background-color: lime;
        font-weight: bold;
        font-size: 3rem;
        width: 30rem;
        padding: 2rem 1rem;
        transition: all 1s ease;
    }
    .div1.on{
        width: 60rem;
        background-color: peru;
    }
</style>

 

 

html

<div class="div1">나는 길어진다.</div>
<button type="button" class="btn">클릭하면 실행됨</button>

 

이런 화면입니다.

(볼품이 없습니다.)

 

 

1. 클래스 추가하기

document.querySelector('.btn').addEventListener('click', () => {
    document.querySelector('.div1').classList.add('on');
});

 

 

2. 애니메이션 끝났는지 확인하기

document.querySelector('.div1').addEventListener('transitionend', () => {});

이 부분이 애니메이션이 끝났는지 확인하는 부분입니다. (이벤트리스너)

이번 포스팅 에서는 클래스를 추가하여 CSS트랜지션으로 애니메이션을 줬기 때문에 transitionend 이벤트 리스너를 사용했습니다.

const myfunction = new Promise(resolve => {
    document.querySelector('.div1').classList.add('on');
    document.querySelector('.div1').addEventListener('transitionend', () => {
        resolve(); //트랜지션이 끝났다고 알려줌
    });
});

 

 

 

3. 그 다음 기능 실행하기

.then(() => {
    alert('트랜지션 끝났다.');
});

 

 

 

전체 스크립트 내용

<script>
    document.querySelector('.btn').addEventListener('click', () => {
        const myfunction = new Promise(resolve => {
            document.querySelector('.div1').classList.add('on');
            document.querySelector('.div1').addEventListener('transitionend', () => {
                resolve(); //트랜지션이 끝났다고 알려줌
            });
        });
        myfunction.then(() => {
            alert('트랜지션 끝났다.');
        });
        
    });
    
</script>

 

 

실행하면 이와 같이 됩니다.

 

 

 

간단한 동작에서는 차이가 없겠지만

확실이 순차적으로 실행해야 하는 기능이 있다면

Promise 함수를 사용하는것이 안전한것 같습니다.

 

 

전체 코드 입니다.

(별로 볼 건 없습니다.)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .div1{
            display: flex;
            justify-content: center;
            align-items: center;
            background-color: lime;
            font-weight: bold;
            font-size: 3rem;
            width: 30rem;
            padding: 2rem 1rem;
            transition: all 1s ease;
        }
        .div1.on{
            width: 60rem;
            background-color: peru;
        }
    </style>
</head>
<body>
    <div class="div1">나는 길어진다.</div>
    <button type="button" class="btn">클릭하면 실행됨</button>
</body>
<script>
    document.querySelector('.btn').addEventListener('click', () => {
        const myfunction = new Promise(resolve => {
            document.querySelector('.div1').classList.add('on');
            document.querySelector('.div1').addEventListener('transitionend', () => {
                resolve(); //트랜지션이 끝났다고 알려줌
            });
        });
        myfunction.then(() => {
            alert('트랜지션 끝났다.');
        });
        
    });
    
</script>
</html>

 

(광고 한번씩 클릭해 주시면 대단히 감사드리겠습니다.)

 

300x250