
마우스 이동과 관련된 이벤트 타입에는
mouseover,mouseout,mouseenter,mouseleave가 있다. 이 네 가지 이벤트는 이름에서도 알 수 있듯이 마우스 포인터의 이동을 감지하는 역할을 한다. 이번에는mouseover/mouseout과mouseenter/mouseleave의 차이를 살펴보자.
mouseover와 mouseenter*는 마우스 포인터가 요소 밖에서 안으로 들어갈 때** 발생.mouseout과 mouseleave*는 마우스 포인터가 요소 안에서 밖으로 나갈 때** 발생.mouseover/mouseout: 버블링이 발생한다.mouseenter/mouseleave: 버블링이 발생하지 않는다.mouseover/mouseout:mouseenter/mouseleave:<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Mouse Events Comparison</title>
<style>
.box {
display: inline-block;
width: 200px;
height: 150px;
margin: 20px;
padding: 10px;
border: 2px solid navy;
background-color: lightblue;
position: relative;
}
.title {
display: block;
margin-top: 10px;
padding: 5px;
background-color: white;
border: 1px solid darkblue;
text-align: center;
}
</style>
</head>
<body>
<h1>Mouse Event Comparison</h1>
<div id="box1" class="box">
<span class="title">mouseover event count: 0</span>
</div>
<div id="box2" class="box">
<span class="title">mouseenter event count: 0</span>
</div>
<script src="mouse-events-comparison.js"></script>
</body>
</html>
// HTML 요소 선택
const box1 = document.querySelector('#box1');
const box2 = document.querySelector('#box2');
let mouseoverCount = 0;
let mouseenterCount = 0;
// mouseover 이벤트 핸들러
box1.addEventListener('mouseover', () => {
mouseoverCount++;
const msg = `mouseover event count: ${mouseoverCount}`;
box1.querySelector('.title').textContent = msg;
console.log('mouseover 발생!');
});
// mouseenter 이벤트 핸들러
box2.addEventListener('mouseenter', () => {
mouseenterCount++;
const msg = `mouseenter event count: ${mouseenterCount}`;
box2.querySelector('.title').textContent = msg;
console.log('mouseenter 발생!');
});
mouseover 이벤트mouseenter 이벤트mouseover/mouseout을 사용.mouseenter/mouseleave를 사용.mouseover와 mouseout은 자식 요소로의 이동 시에도 이벤트가 발생하므로, 중복 호출 문제가 발생할 수 있다.mouseenter와 mouseleave는 이러한 문제를 피할 수 있다.mouseover/mouseout: 버블링 발생, 자식 요소 영역까지 계산.mouseenter/mouseleave: 버블링 없음, 자식 요소 영역 무시.mouseover/mouseout.mouseenter/mouseleave.