• webmini life skin Ver 1.4.1 update view
  • 사이트 제작 문의 오랜 경험을 바탕으로 웹퍼블리싱을 해드립니다 제작 문의하기
  • 블로그 리뷰 문의 검색엔진최적화로 제품 리뷰를 해드립니다 리뷰 문의하기
Front-end/Javascript

[Javascript]DOM Script 이벤트와 선택자

by 빽짱구 2024. 12. 5.
본문글자

이벤트

HTML DOM에서 지원하는 스크립트 이벤트 종류는 웹 페이지에서 다양한 사용자 상호작용과 브라우저 동작을 처리하기 위해 사용됩니다. 주요 이벤트는 다음과 같은 그룹으로 나눌 수 있습니다.


1. 마우스 이벤트

  • onclick: 요소를 클릭했을 때 발생
  • ondblclick: 요소를 더블 클릭했을 때 발생
  • onmousedown: 마우스 버튼을 눌렀을 때 발생
  • onmouseup: 마우스 버튼을 뗐을 때 발생
  • onmousemove: 마우스가 요소 위에서 움직일 때 발생
  • onmouseover: 마우스가 요소 위로 들어갈 때 발생
  • onmouseout: 마우스가 요소를 벗어날 때 발생
  • onmouseenter: 마우스가 요소 위로 들어갈 때 (버블링 없음)
  • onmouseleave: 마우스가 요소를 벗어날 때 (버블링 없음)
<button id="myButton">Click me!</button>
<script>
  const button = document.getElementById('myButton');
  
  button.onclick = function () {
    alert('Button was clicked!');
  };
</script>

2. 키보드 이벤트

  • onkeydown: 키를 눌렀을 때 발생
  • onkeypress: 키를 눌렀을 때 (현재는 onkeydown으로 대체되는 추세)
  • onkeyup: 키를 뗐을 때 발생
<input type="text" id="textInput" placeholder="Type something" />
<script>
  const input = document.getElementById('textInput');
  
  input.onkeydown = function (event) {
    console.log(`Key down: ${event.key}`);
  };

  input.onkeyup = function (event) {
    console.log(`Key up: ${event.key}`);
  };
</script>

3. 포커스 및 폼 이벤트

  • onfocus: 요소가 포커스를 받을 때 발생
  • onblur: 요소가 포커스를 잃을 때 발생
  • onchange: 입력 요소의 값이 변경되고 포커스를 잃었을 때 발생
  • oninput: 사용자가 입력을 할 때마다 발생
  • onsubmit: 폼을 제출할 때 발생
  • onreset: 폼이 리셋될 때 발생
  • onselect: 텍스트가 선택되었을 때 발생
<form id="myForm">
  <input type="text" placeholder="Enter your name" required />
  <button type="submit">Submit</button>
</form>
<script>
  const form = document.getElementById('myForm');
  
  form.onsubmit = function (event) {
    event.preventDefault(); // 기본 동작(페이지 새로고침)을 막음
    alert('Form submitted!');
  };
</script>

 

 


4. 드래그 & 드롭 이벤트

  • ondrag: 요소가 드래그될 때 발생
  • ondragstart: 드래그가 시작될 때 발생
  • ondragend: 드래그가 끝났을 때 발생
  • ondragover: 드래그된 요소가 다른 요소 위에 있을 때 발생
  • ondragenter: 드래그된 요소가 특정 요소에 들어갈 때 발생
  • ondragleave: 드래그된 요소가 특정 요소를 벗어날 때 발생
  • ondrop: 드래그된 요소가 드롭될 때 발생
<div id="dragBox" draggable="true" style="width: 100px; height: 100px; background-color: coral;">
  Drag me
</div>
<div id="dropZone" style="width: 200px; height: 100px; background-color: lightgrey; margin-top: 20px;">
  Drop here
</div>
<script>
  const dragBox = document.getElementById('dragBox');
  const dropZone = document.getElementById('dropZone');

  dragBox.ondragstart = function () {
    console.log('Dragging started');
  };

  dropZone.ondragover = function (event) {
    event.preventDefault(); // 드롭을 허용
    dropZone.style.backgroundColor = 'lightgreen';
  };

  dropZone.ondrop = function () {
    dropZone.style.backgroundColor = 'lightgrey';
    dropZone.textContent = 'Dropped!';
  };
</script>

5. 클립보드 이벤트

  • oncopy: 사용자가 콘텐츠를 복사할 때 발생
  • oncut: 사용자가 콘텐츠를 잘라낼 때 발생
  • onpaste: 사용자가 콘텐츠를 붙여넣을 때 발생
<div>
  <textarea id="clipboardArea" placeholder="Try copying, cutting, or pasting here"></textarea>
</div>

<script>
  const textArea = document.getElementById('clipboardArea');

  // 복사 이벤트
  textArea.addEventListener('copy', (event) => {
    alert('Text copied!');
    console.log('Copied text:', window.getSelection().toString());
  });

  // 잘라내기 이벤트
  textArea.addEventListener('cut', (event) => {
    alert('Text cut!');
    console.log('Cut text:', window.getSelection().toString());
  });

  // 붙여넣기 이벤트
  textArea.addEventListener('paste', (event) => {
    alert('Text pasted!');
    const pastedData = event.clipboardData.getData('text');
    console.log('Pasted text:', pastedData);
  });
</script>

6. 미디어 이벤트

  • onplay: 미디어가 재생을 시작했을 때 발생
  • onpause: 미디어가 일시 정지되었을 때 발생
  • onended: 미디어 재생이 끝났을 때 발생
  • onvolumechange: 볼륨이 변경될 때 발생
  • onseeked: 사용자가 특정 위치로 이동한 후 발생
  • onwaiting: 미디어가 다음 데이터를 기다리는 중일 때 발생
<audio id="audioPlayer" controls>
  <source src="example.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.
</audio>
<div id="mediaStatus">Status: Paused</div>

<script>
  const audio = document.getElementById('audioPlayer');
  const status = document.getElementById('mediaStatus');

  // 재생 이벤트
  audio.addEventListener('play', () => {
    status.textContent = 'Status: Playing';
    console.log('Audio is playing');
  });

  // 일시 정지 이벤트
  audio.addEventListener('pause', () => {
    status.textContent = 'Status: Paused';
    console.log('Audio is paused');
  });

  // 종료 이벤트
  audio.addEventListener('ended', () => {
    status.textContent = 'Status: Ended';
    console.log('Audio playback ended');
  });

  // 볼륨 변경 이벤트
  audio.addEventListener('volumechange', () => {
    console.log('Volume changed:', audio.volume);
  });
</script>

7. 윈도우 이벤트

  • onload: 페이지가 로드되었을 때 발생
  • onunload: 페이지가 언로드될 때 발생
  • onresize: 윈도우 크기가 변경되었을 때 발생
  • onscroll: 사용자가 스크롤했을 때 발생
  • onerror: 에러가 발생했을 때 발생
<script>
  // 윈도우 크기변경
  window.addEventListener('resize', () => {
    console.log(`Window size: ${window.innerWidth}x${window.innerHeight}`);
  });
</script>

 

<div style="height: 2000px; padding: 10px;">
  Scroll the page to see the event in action!
</div>
<script>
  // 페이지 스크롤
  window.addEventListener('scroll', () => {
    console.log('Page scrolled! Scroll position:', window.scrollY);
  });
</script>

 

<script>
  // 페이지 로드
  window.addEventListener('load', () => {
    console.log('Page fully loaded!');
  });
</script>

8. 터치 이벤트 (모바일 전용)

  • ontouchstart: 화면을 터치했을 때 발생
  • ontouchmove: 터치한 상태로 움직일 때 발생
  • ontouchend: 터치가 끝났을 때 발생
  • ontouchcancel: 터치가 취소되었을 때 발생
<div id="touchBox" style="width: 200px; height: 200px; background-color: lightblue; text-align: center; line-height: 200px;">
  Touch me!
</div>

<script>
  const touchBox = document.getElementById('touchBox');

  // 터치 시작 이벤트
  touchBox.addEventListener('touchstart', (event) => {
    console.log('Touch started');
    touchBox.style.backgroundColor = 'lightgreen';
  });

  // 터치 이동 이벤트
  touchBox.addEventListener('touchmove', (event) => {
    console.log('Touch moving at:', event.touches[0].clientX, event.touches[0].clientY);
  });

  // 터치 종료 이벤트
  touchBox.addEventListener('touchend', () => {
    console.log('Touch ended');
    touchBox.style.backgroundColor = 'lightblue';
  });

  // 터치 취소 이벤트
  touchBox.addEventListener('touchcancel', () => {
    console.log('Touch canceled');
    touchBox.style.backgroundColor = 'red';
  });
</script>

9. 기타 이벤트

  • onwheel: 마우스 휠을 굴렸을 때 발생
  • oncontextmenu: 우클릭 메뉴가 열릴 때 발생
  • onprogress: 파일 다운로드나 업로드 진행 상황이 업데이트될 때 발생
<div id="scrollableDiv" style="width: 300px; height: 300px; overflow: auto; border: 1px solid black;">
  <div style="height: 1000px; padding: 10px;">
    Scroll inside this box using your mouse wheel.
  </div>
</div>
<p id="scrollInfo">Scroll direction: </p>

<script>
  const scrollableDiv = document.getElementById('scrollableDiv');
  const scrollInfo = document.getElementById('scrollInfo');

  scrollableDiv.addEventListener('wheel', (event) => {
    event.preventDefault();
    const direction = event.deltaY > 0 ? 'down' : 'up';
    scrollInfo.textContent = `Scroll direction: ${direction}`;
    console.log(`Mouse wheel moved: ${event.deltaY}`);
  });
</script>

 

선택자

**선택자(Selectors)**는 HTML 문서 내의 특정 요소를 찾고 조작하기 위해 사용됩니다. JavaScript에서 DOM 요소를 선택하는 방법은 여러 가지가 있으며, 이를 통해 동적으로 페이지를 제어할 수 있습니다.


1. ID 선택자

  • 특정 ID를 가진 요소를 선택할 때 사용합니다.
  • 메서드: document.getElementById()
const element = document.getElementById('myId');
console.log(element);

 

2. 클래스 선택자

  • 특정 클래스를 가진 요소를 선택합니다.
  • 메서드: document.getElementsByClassName()
  • 특징: HTMLCollection(유사 배열)로 반환됩니다.
const elements = document.getElementsByClassName('myClass');
console.log(elements); // HTMLCollection

 

3. 태그 이름 선택자

  • 특정 태그 이름을 가진 요소를 선택합니다.
  • 메서드: document.getElementsByTagName()
  • 특징: HTMLCollection으로 반환됩니다.
const elements = document.getElementsByTagName('p');
console.log(elements); // 모든 <p> 요소

 

4. CSS 선택자

  • CSS 스타일과 동일한 방식으로 요소를 선택합니다.
  • 메서드:
    • 단일 요소 선택: document.querySelector()
    • 여러 요소 선택: document.querySelectorAll()
  • 특징:
    • querySelector: 첫 번째로 매칭되는 요소를 반환
    • querySelectorAll: NodeList(유사 배열)로 반환
// 단일 요소 선택
const singleElement = document.querySelector('.myClass');
console.log(singleElement);

// 여러 요소 선택
const allElements = document.querySelectorAll('.myClass');
console.log(allElements); // NodeList

 

5. 이름 속성 선택자

  • name 속성을 가진 요소를 선택합니다.
  • 메서드: document.getElementsByName()
const elements = document.getElementsByName('username');
console.log(elements); // 모든 name="username" 요소

 

6. 복합 선택자

  • 여러 선택자를 조합하여 요소를 선택합니다.
  • CSS 선택자와 유사하게 작동:
    • 자식 요소 선택: parent > child
    • 후손 요소 선택: ancestor descendant
    • 클래스 및 ID 조합: #id.class
// 특정 ID의 자식 요소 선택
const child = document.querySelector('#parent > .child');
console.log(child);

// 여러 조건을 가진 요소 선택
const special = document.querySelectorAll('.class1.class2');
console.log(special);

 

7. 속성 선택자

  • 특정 속성을 가진 요소를 선택합니다.
  • CSS 속성 선택자와 동일:
    • [attribute]: 속성을 가진 요소
    • [attribute="value"]: 특정 값을 가진 속성
    • [attribute^="value"]: 특정 값으로 시작하는 속성
    • [attribute$="value"]: 특정 값으로 끝나는 속성
// 'data-test' 속성을 가진 요소 선택
const elements = document.querySelectorAll('[data-test]');
console.log(elements);

// 'href' 속성이 'https'로 시작하는 요소 선택
const links = document.querySelectorAll('a[href^="https"]');
console.log(links);

 

8. 전체 문서 선택

  • HTML 문서 전체를 선택하거나 특별한 경우 루트 요소를 선택합니다.
  • 메서드:
    • document.documentElement: <html> 요소를 반환
    • document.body: <body> 요소를 반환
console.log(document.documentElement); // <html>
console.log(document.body); // <body>

 

728x90

'Front-end/Javascript'의 다른글

  • 현재글[Javascript]DOM Script 이벤트와 선택자