자주 사용되는 DOM 이벤트
이벤트는 사용자의 행동이나 브라우저 상태 변화에 따라 발생하며, 이를 기반으로 웹 애플리케이션의 동작을 제어할 수 있습니다. 아래는 웹 개발에서 자주 활용되는 주요 DOM 이벤트들입니다.
마우스 이벤트
-
click: 요소에서 마우스 왼쪽 버튼을 클릭(터치스크린에서는 탭)했을 때 발생.
-
contextmenu: 마우스 오른쪽 버튼을 클릭했을 때 발생.
-
mouseover / mouseout: 마우스 커서가 요소 위로 들어오거나 나갈 때 발생.
-
mousedown / mouseup: 마우스 버튼을 누르거나 뗄 때 발생.
-
mousemove: 마우스가 움직일 때 발생.
폼 이벤트
-
submit: 사용자가 <form> 태그를 제출할 때 발생.
-
focus: <input> 같은 요소에 포커스가 맞춰질 때 발생.
키보드 이벤트
-
keydown / keyup: 키를 누르거나 뗄 때 발생.
문서 이벤트
-
DOMContentLoaded: HTML이 모두 로드되고 DOM이 완성되었을 때 발생.
CSS 이벤트
transitionend: CSS 트랜지션이 완료되었을 때 발생.
이벤트 핸들러
HTML 속성으로 이벤트 핸들러 할당
가장 간단한 방법은 HTML 태그에 on<event> 속성을 직접 사용하는 것입니다.
<button onclick="alert('안녕하세요!')">클릭하세요</button>
-
장점: 직관적이고 간단함.
-
단점: 코드가 길어지면 가독성이 떨어지고, HTML과 JavaScript가 섞여 유지보수가 어려움. 속성값은 문자열로 처리되므로 따옴표 사용에 주의해야 함.
긴 코드를 피하려면 별도의 함수를 호출하는 방식이 좋습니다:
<script>
function greet() {
alert('안녕하세요!');
}
</script>
<button onclick="greet()">클릭하세요</button>
DOM 프로퍼티로 핸들러 할당
<button id="myButton">클릭하세요</button>
<script>
const button = document.getElementById('myButton');
button.onclick = function() {
alert('버튼이 클릭되었습니다!');
};
</script>
- 장점: HTML과 JavaScript를 분리해 깔끔함.
- 단점: 하나의 이벤트에 하나의 핸들러만 지정 가능. 새 핸들러를 추가하면 기존 핸들러가 덮어씌워짐.
button.onclick = () => alert('첫 번째');
button.onclick = () => alert('두 번째'); // 첫 번째 핸들러가 사라짐
핸들러 제거
button.onclick = null;
addEventListener로 핸들러 관리
하나의 이벤트에 여러 핸들러를 추가할 수 있습니다.
element.addEventListener('click', function(event) {
alert('첫 번째 반응');
});
element.addEventListener('click', function(event) {
alert('두 번째 반응');
});
addEventListener 문법
element.addEventListener(event, handler, [options]);
- event: 이벤트 이름(예: "click")
- handler: 실행할 함수
- options: { once: true } (한 번 실행 후 제거), { capture: true } (캡처링 단계에서 실행) 등
핸들러 제거
function sayHello() {
alert('안녕!');
}
element.addEventListener('click', sayHello);
element.removeEventListener('click', sayHello); // 동일한 함수 참조 필요
- 장점: 유연성, 다중 핸들러 지원, 특정 이벤트 처리 가능
- 주의점: 제거하려면 동일 함수 참조 사용
이벤트 객체
이벤트 발생 시 브라우저는 이벤트 객체를 생성해 핸들러에 전달합니다. 이 객체는 이벤트의 세부 정보를 담고 있어, 이를 통해 더 정교한 제어가 가능합니다.
document.querySelector('button').addEventListener('click', function(event) {
console.log(`이벤트 타입: ${event.type}`);
console.log(`발생 요소: ${event.currentTarget}`);
console.log(`클릭 위치: (${event.clientX}, ${event.clientY})`);
});
객체 형태의 핸들러
addEventListener는 함수뿐 아니라 객체를 핸들러로 사용할 수 있습니다. 이 경우 객체의 handleEvent 메서드가 호출됩니다.
const button = document.querySelector('button');
const handlerObj = {
handleEvent(event) {
alert(`${event.type} 이벤트 발생!`);
}
};
button.addEventListener('click', handlerObj);
클래스 형태도 사용
class EventManager {
handleEvent(event) {
if (event.type === 'click') {
alert('클릭!');
}
}
}
const manager = new EventManager();
button.addEventListener('click', manager);
'브라우저' 카테고리의 다른 글
이벤트 위임: 효율적인 이벤트 관리 (0) | 2025.02.20 |
---|---|
이벤트 버블링과 캡처링 (0) | 2025.02.20 |
브라우저에서 요소 좌표 다루기 (0) | 2025.02.20 |
브라우저 창과 스크롤 이해하기: 웹 레이아웃의 숨겨진 영역 (0) | 2025.02.20 |
DOM 기하학: 요소 크기와 스크롤의 상태 (0) | 2025.02.20 |