웹 개발을 하다 보면 특정 요소에 대해 클릭이나 호버 같은 마우스 이벤트를 일시적으로 막아야 하는 경우가 있습니다. 이럴 때 pointer-events 속성을 활용하면 간단하게 해결할 수 있습니다.
pointer-events 속성이란?
pointer-events는 CSS 속성으로, 요소가 마우스 포인터 이벤트(클릭, 더블클릭, 호버 등)에 반응할지 여부를 결정합니다. JavaScript에서는 이 값을 동적으로 변경하여 원하는 시점에 마우스 이벤트를 켜고 끌 수 있습니다.
- none : 해당 요소가 마우스 이벤트를 받지 않도록 비활성화합니다.
- auto : 기본값으로, 요소가 정상적으로 마우스 이벤트를 받도록 활성화합니다.
예제 코드
다음은 버튼 두 개를 사용해 특정 div 요소의 마우스 이벤트를 비활성화하고 다시 활성화하는 전체 코드입니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
body {
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
.result {
font-size: 18px;
font-weight: 500;
color: rebeccapurple;
}
.size {
font-size: 30px;
}
</style>
</head>
<body>
<h1>JavaScript로 마우스 이벤트 비활성화하기</h1>
<div class="result">div 안에 있는 텍스트입니다</div>
<button class="Btn">비활성화(DISABLE)</button>
<button class="Btn">활성화(ENABLE)</button>
<h3>
위의 버튼을 클릭하여 마우스 이벤트를 켜거나 끌 수 있습니다
</h3>
<script>
let resEle = document.querySelector(".result");
let sampleEle = document.querySelector(".sample");
let BtnEle = document.querySelectorAll(".Btn");
resEle.addEventListener("click", () => {
resEle.classList.toggle("size");
});
BtnEle[0].addEventListener("click", () => {
resEle.style.pointerEvents = "none";
});
BtnEle[1].addEventListener("click", () => {
resEle.style.pointerEvents = "auto";
});
</script>
</body>
</html>코드 설명
위 코드의 핵심 로직은 다음과 같습니다.
- 기본 클릭 이벤트 : 보라색 텍스트가 있는
.resultdiv에는 클릭 이벤트 리스너가 등록되어 있으며, 클릭할 때마다size클래스가 토글되어 글자 크기가 커졌다 작아집니다. - 비활성화 버튼 : 첫 번째 버튼을 클릭하면
resEle.style.pointerEvents = "none"이 실행되어 해당 div가 모든 마우스 이벤트를 무시합니다. - 활성화 버튼 : 두 번째 버튼을 클릭하면
pointerEvents값이auto로 변경되어 다시 정상적으로 클릭 이벤트를 받습니다.
실행 결과
위 코드를 실행하면 다음과 같이 동작합니다.
보라색 텍스트를 클릭한 경우
텍스트를 클릭하면 글자 크기가 커지거나 작아지는 것을 확인할 수 있습니다.
'비활성화(DISABLE)' 버튼을 클릭한 후 텍스트를 클릭한 경우
pointer-events가 none으로 설정되어 있기 때문에 아무리 클릭해도 텍스트 크기는 변하지 않습니다. 클릭 이벤트 자체가 요소에 전달되지 않습니다.
'활성화(ENABLE)' 버튼을 클릭한 후 텍스트를 클릭한 경우
마우스 이벤트가 다시 활성화되어 클릭 시 글자 크기가 정상적으로 토글됩니다.
마무리
이처럼 pointer-events 속성을 JavaScript와 함께 사용하면 별도의 플래그 변수나 조건문 없이도 특정 요소의 마우스 상호작용을 손쉽게 제어할 수 있습니다. 오버레이 레이어 처리, 로딩 중 입력 차단 등 다양한 UI 시나리오에서 유용하게 활용할 수 있습니다.