본문 바로가기

개인공부

CSS : transitinoend 이벤트

반응형

전체소스

<!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>
        .ball {
            position: absolute;
            left: 0;
            top: 0;
            width: 30px;
            height: 30px;
            margin: -15px 0 0 -15px;
            border-radius: 50%;
            transition: 1s;
            background-color: rebeccapurple;
        }
        .ball.end{
            background: dodgerblue;
        }
    </style>
</head>

<body>
    <div class="ball"></div>
    <script>
        const ballElem = document.querySelector('.ball');

        window.addEventListener('click', function (e) {
            ballElem.style.transform = 'translate(' + e.clientX + 'px, ' + e.clientY + 'px)';
        });

        // start도 있음.
        ballElem.addEventListener('transitionend',function(e){
            if(!ballElem.classList.contains('end')){
                ballElem.classList.add('end');
            }else{
                ballElem.classList.remove('end');
            }
            console.log(e.elapsedTime);
            console.log(e.propertyName);
        });

    </script>
</body>

</html>

부분소스

     window.addEventListener('click', function (e) {
            ballElem.style.transform = 'translate(' + e.clientX + 'px, ' + e.clientY + 'px)';
        });

translate 효과를 이용해서 원을 이동시킨다. 이때 원의 좌표는 top , left에 기준으로 되어있다.

따라서 .margin을 이용해서 조절한다.

 

        ballElem.addEventListener('transitionend',function(e){
            if(!ballElem.classList.contains('end')){
                ballElem.classList.add('end');
            }else{
                ballElem.classList.remove('end');
            }
            console.log(e.elapsedTime);
            console.log(e.propertyName);
        });

이벤트가 끝낫을때 transition 효과가 끝난후 실행되는 메소드이다. ballElem에 따라 class를 추가하고 삭제한다.

이때 클래스를 바꾸는 행위에서도 transitionend가 실행되기때문에 무한이 실행된다.

이런 경우를 주위해서 코딩하면 될듯하다.

반응형

'개인공부' 카테고리의 다른 글

컨테이너란 무엇입니까?  (0) 2021.01.09
반응형 웹사이트 구현 (flex)  (0) 2021.01.08
CSS : Scroll 사용  (0) 2021.01.01
javascript 클릭리스너 활용  (0) 2021.01.01
이벤트 위임  (2) 2020.12.30