반응형
전체소스
<!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 |