[기본 개념] 3 | (1.2) DOM 에서 이벤트 처리하기
1 문서 객체 모델 (DOM)
2 DOM 요소에 접근, 속성 가져오기
3> DOM 에서 이벤트 처리하기
4 DOM 에서 노드 추가, 삭제하기
3 DOM 에서 이벤트 처리하기
DOM 요소에 함수 직접 연결하기
이벤트 처리기 함수가 간단하면 DOM 요소에 직접 연결할 수 있다.
(ex. 이미지를 클릭하면 알림 창 표시하기)
...
<img src="images/cup.png" id="cup">
...
<script>
var cup = document.querySelector("#cup"); // id="cup" 요소를 가져옴
cup.onclick = function() {
alert("이미지를 클릭했습니다.");
}
</script>
...
함수 이름을 사용해 연결하기
이벤트가 발생했을 때 실행 함수를 정의해 놓았다면 함수 이름을 사용해 연결할 수 있다. 이 경우 함수 이름 다음 괄호(( )) 를 추가하지 않는다.
(ex. 이미지를 클릭하면 함수 실행하기)
...
<img src="images/cup.png" id="cup">
...
<script>
var cup = document.querySelector("#cup"); // id="cup" 요소를 가져옴
cup.onclick = changePic;
function changePic( ) {
cup.src = "images/cup-1.png"; // cup 요소의 경로를 다른 이미지 경로로 바꿈
}
</script>
...
DOM 의 event 객체
DOM 에는 이벤트 정보를 저장하는 event 객체가 있다. 여기서 event 객체를 함수의 인수로 사용한다.
(ex. 이미지에서 클릭한 위치 알아내기)
...
<img src="images/cup.png" id="cup">
...
<script>
var cup = document.querySelector("#cup"); // id="cup" 요소를 가져옴
cup.onclick = function(event) {
alert("이벤트 유형 : " + event.type + ", 이벤트 발생 위치 : "
+ event.pageX + ", " + event.pageY);
}
</script>
...
event 객체의 주요 프로퍼티와 메서드
구분 | 설명 | |
프로퍼티 | altKey | 이벤트가 발생했을 때 Alt 를 눌렀는지 여부를 boolean 값으로 반환 |
button | 마우스에서 누른 버튼의 키값을 반환 | |
charCode | keypress 이벤트가 발생할 때 어떤 키를 눌렀는지 유니코드 값으로 반환 | |
clientX | 이벤트가 발생한 가로 위치를 반환 | |
clientY | 이벤트가 발생한 세로 위치를 반환 | |
ctrlKey | 이벤트가 발생했을 때 Ctrl 를 눌렀는지 여부를 boolean 값으로 반환 | |
pageX | 현재 문서 기준으로 이벤트가 발생한 가로 위치를 반환 | |
pageY | 현재 문서 기준으로 이벤트가 발생한 세로 위치를 반환 | |
screenX | 현재 화면 기준으로 이벤트가 발생한 가로 위치를 반환 | |
screenY | 현재 화면 기준으로 이벤트가 발생한 세로 위치를 반환 | |
shiftKey | 이벤트가 발생할 때 Shift 를 눌렀는지 여부를 boolean 값으로 반환 | |
target | 이벤트가 최초로 발생한 대상을 반환 | |
timeStamp | 이벤트가 발생한 시간을 반환 | |
type | 발생한 이벤트 이름을 반환 | |
which | 키보드와 관련된 이벤트가 발생할 때 키의 유니코드 값을 반환 | |
메서드 | preventDefault( ) | 이벤트를 취소할 수 있는 경우에 취소 |
이벤트가 발생한 대상에 접근하려면 이벤트 처리기에서 예약어 this 를 사용해야 한다.
(ex. this 예약어 사용하기)
...
<img src="images/card.png" id="card">
...
<script>
var card = document.querySelector("#card");
card.onclick = function(event) {
alert("클릭한 이미지 파일 : " + this.src);
}
</script>
...
addEventListener( ) 메서드 사용하기
기본형
요소.addEventListener(이벤트, 함수, 캡처 여부);
이벤트 이벤트 유형을 지정, on 을 붙이지 않고 씀
함수 이벤트가 발생하면 실행할 명령이나 함수 지정, 함수 정의할 때 event 객체를 인수로 받음
캡처 여부 이벤트를 캡처하는지 여부를 지정, 기본값은 false 이고, true 이면 캡쳐링 false 이면 버블링
이벤트 캡처링 : DOM 부모 노드에서 자식 노드로 전달
이벤트 버블링 : DOM 자식 노드에서 부모 노드로 전달
addEventListener( ) 메서드와 event 객체를 사용하면 한 요소에 여러 이벤트 처리기를 연결해 실행할 수 있으며 끝에 세미콜론(;) 을 꼭 붙여야 한다.
(ex. 마우스 포인터를 올리면 이미지 바꾸기)
...
<img src="images/easys.jpg" id="cover">
...
<script>
var cover = document.getElementById("cover");
cover.addEventListener("mouseover",changePic, false);
cover.addEventListener("mouseout",originPic, false);
function changePic() {
cover.src = "images/easys-1.jpg";
}
function originPic() {
cover.src = "images/easys.jpg";
}
</script>
...
따로 다른 곳에서 사용하는 함수가 아니라면 메서드 안에 함수 표현식으로 사용하는 경우가 많다. 이때 함수명은 제외한다.
(ex. 메서드 안에서 함수 선언하기)
...
<img src="images/easys.jpg" id="cover">
...
<script>
var cover = document.getElementById("cover");
cover.addEventListener("mouseover",function() {
cover.src = "images/easys-1.jpg";
});
cover.addEventListener("mouseout", function() {
cover.src = "images/easys.jpg";
});
</script>
...
CSS 속성에 접근하기
기본형
document.요소명.style.속성명
CSS 속성에 접근하려면 해당 스타일이 적용된 HTML 요소 다음에 예약어 style 을 쓰고 속성을 적는다.
중간에 하이픈(-) 이 있는 속성은 두 단어를 합쳐서 사용한다.
(ex. 도형의 테두리와 배경색 바꾸기)
...
<div id="rect"></div>
...
<script>
var myRect = document.querySelector("#rect");
myRect.addEventListener("mouseover", function() { // 마우스 포인터를 올리면
myRect.style.backgroundColor = "green"; // 초록색으로 지정
myRect.style.borderRadius = "50%"; // 테두리 둥글기를 50% 로 지정
});
myRect.addEventListener("mouseout", function() { // 마우스 포인터를 내리면
myRect.style.backgroundColor = ""; // 배경색 원래 값으로 지정
myRect.style.borderRadius = ""; // 테두리 원래 값으로 지정
});
</script>
...
출처 | Do it! HTML+CSS+자바스크립트 웹 표준의 정석(고경희)
'💠프로그래밍 언어 > JavaScript' 카테고리의 다른 글
[정리] 3 | DOM 트리, 접근하기 & 새로운 요소 추가, 노드 삭제 정리 (0) | 2022.08.29 |
---|---|
[기본 개념] 3 | (1.3) DOM 에서 노드 추가, 삭제하기 (0) | 2022.08.27 |
[기본 개념] 3 | (1.1) DOM 의 접근, 속성 가져오기 (0) | 2022.08.24 |
[정리] 2 | 객체, 자바스크립트의 내장 객체 정리 (0) | 2022.08.23 |
[기본 개념] 2 | (2.2) 브라우저와 관련된 객체 (1) | 2022.08.23 |