일자 : 11주차 1차시
onmousedown, onmouseup, 그리고 onclick 이벤트onmousedown, onmouseup, 그리고 onclick 이벤트는 마우스 클릭의 단계별 과정을 구성한다.
onmousedown 이벤트가 발생한다. onmouseup 이벤트가 발생한다. onclick 이벤트가 발생한다. <!DOCTYPE html>
<html>
<body>
<h1>JavaScript HTML 이벤트</h1>
<h2>onmousedown 속성</h2>
<!-- onmousedown, onmouseup 이벤트를 사용한 div 박스 -->
<div onmousedown="mDown(this)" onmouseup="mUp(this)"
style="background-color:#D94A38;width:90px;height:20px;padding:40px;">
Click Me</div>
<script>
// 사용자가 마우스 버튼을 누를 때 호출되는 함수
function mDown(obj) {
obj.style.backgroundColor = "#1ec5e5"; // 배경색을 변경
obj.innerHTML = "Release Me"; // 텍스트를 변경
}
// 사용자가 마우스 버튼을 뗄 때 호출되는 함수
function mUp(obj) {
obj.style.backgroundColor="#D94A38"; // 배경색을 원래대로 복원
obj.innerHTML="Thank You"; // 텍스트를 변경
}
</script>
</body>
</html>
addEventListener() 메서드는 기존 이벤트를 덮어쓰지 않고 동일한 요소에 여러 개의 이벤트를 추가할 수 있게 해준다.| 속성 | 역할 |
|---|---|
mousedown | 마우스 버튼이 눌릴 때 발생 |
mouseup | 마우스 버튼이 놓일 때 발생 |
mouseover | 마우스 커서가 요소 위로 이동할 때 발생 |
mouseout | 마우스 커서가 요소를 벗어날 때 발생 |
mouseenter | 마우스 커서가 요소에 들어올 때 발생 |
mouseleave | 마우스 커서가 요소에서 나갈 때 발생 |
dblclick | 요소를 더블 클릭할 때 발생 |
contextmenu | 마우스 오른쪽 버튼 클릭 시 발생 |
focus | 요소가 포커스를 받을 때 발생 |
blur | 요소에서 포커스가 벗어날 때 발생 |
addEventListener() 메서드는 HTML 요소, HTML 문서, window 객체와 같은 HTML DOM 객체나, xmlHttpRequest 객체와 같이 이벤트를 지원하는 다른 객체에도 이벤트 리스너를 추가할 수 있게 해준다.HTML DOM에서는 이벤트 전파 방식이 두 가지가 있다
이벤트 전파는 이벤트가 발생했을 때 요소의 처리 순서를 정의하는 방법이다. 예를 들어 <div> 요소 안에 <p> 요소가 있을 때, 사용자가 <p> 요소를 클릭하면, 어느 요소의 "click" 이벤트를 먼저 처리해야 할까?
<p> 요소의 click 이벤트가 먼저 처리되고, 그 다음에 <div> 요소의 click 이벤트가 처리된다.<div> 요소의 click 이벤트가 먼저 처리되고, 그 다음에 <p> 요소의 click 이벤트가 처리된다.addEventListener() 메서드를 사용하면 "useCapture" 매개변수를 통해 전파 방식을 지정할 수 있다.addEventListener(event, function, useCapture);
false로, 이 경우 버블링 전파 방식이 사용된다. true로 설정하면 이벤트는 캡처링 전파 방식을 사용한다.removeEventListener() 메서드는 addEventListener()로 추가된 이벤트 핸들러를 제거한다.
HTML 문서의 모든 요소는 W3C HTML DOM 표준에 따르면 노드로 간주된다.
HTML DOM을 사용하면 노드 트리의 모든 노드에 JavaScript로 접근할 수 있다.
새로운 노드를 생성하거나 기존 노드를 수정 및 삭제할 수도 있다.
노드 트리의 노드들은 서로 계층적 관계를 가진다.
부모, 자식, 형제라는 용어가 관계를 설명하는 데 사용된다.
<html>은 루트 노드이다.
<html>은 부모가 없다.
<html>은 <head>와 <body>의 부모이다.
<head>는 <html>의 첫 번째 자식이다.
<body>는 <html>의 마지막 자식이다.
그리고:
<head>는 하나의 자식을 가진다: <title> <title>은 하나의 자식(텍스트 노드)을 가진다: "DOM Tutorial" <body>는 두 개의 자식을 가진다: <h1>과 <p> <h1>은 하나의 자식을 가진다: "DOM Lesson one" <p>는 하나의 자식을 가진다: "Hello world!" <h1>과 <p>는 형제이다. JavaScript를 사용하여 다음 노드 속성을 이용해 노드 간을 탐색할 수 있다.
parentNode childNodes[nodenumber] firstChild lastChild nextSibling previousSibling DOM 처리를 할 때 요소 노드가 텍스트를 포함한다고 가정하는 것은 일반적인 실수이다.
<title id="demo">DOM Tutorial</title>
<title> 요소 노드는 텍스트를 포함하지 않는다. innerHTML 속성을 통해 접근할 수 있다. myTitle = document.getElementById("demo").innerHTML;
innerHTML 속성을 접근하는 것은 첫 번째 자식 노드의 nodeValue 속성을 접근하는 것과 동일하다. myTitle = document.getElementById("demo").firstChild.nodeValue;
myTitle = document.getElementById("demo").childNodes[0].nodeValue;
<h1> 요소의 텍스트를 가져와 <p> 요소에 복사한다. 문서 전체에 접근할 수 있는 두 가지 특별한 속성이 있다.
document.body - 문서의 본문 document.documentElement - 문서 전체 nodeName 속성은 노드의 이름을 나타낸다.
nodeName은 읽기 전용이다. nodeName은 태그 이름과 동일하다. nodeName은 속성 이름이다. nodeName은 항상 #text이다. nodeName은 항상 #document이다. 참고:
nodeName은 HTML 요소의 태그 이름을 항상 대문자로 반환한다.
