class 변경을 통해 간접적으로 스타일 적용하기: element.className, element.classList
classList의 유용한 메소드메소드 내용 참고사항
classList.add
클래스 추가하기
여러 개의 값을 전달하면 여러 클래스 추가 가능
classList.remove
클래스 삭제하기
여러 개의 값을 전달하면 여러 클래스 삭제 가능
classList.toggle
클래스 없으면 추가, 있으면 삭제하기
하나의 값만 적용 가능하고,두 번째 파라미터로 추가 또는 삭제 기능을 강제할 수 있음
이벤트 살펴보기
이벤트 핸들러 등록하기를 통해서 이벤트 핸들러를 등록할 수 있다.
addEventListener 메소드를 활용하면 다양한 이벤트 타입으로 원하는 만큼 이벤트 핸들러를 자유롭게 등록할 수 있어서 onclick 프로퍼티와는 다르게 이벤트 핸들러를 등록한 만큼 동작하게 된다.
Element.addEventListener('type', 'handler')
이벤트 핸들러 삭제하기를 통해서 이벤트 핸들러를 삭제할 수 있다.
Element.removeEventListner('type', 'handler')
이벤트 객체 (Event Object)이벤트 종류마다 가지고 있는 프로퍼티가 다르며, 이벤트에 대한 유용한 정보들을 프로퍼티로 가지고 있다.
이벤트가 발생하면 이벤트 핸들러의 첫 번째 파라미터에는 자동으로 이벤트 객체가 전달된다.
이벤트 버블링 (Event Bubbling)이벤트 버블링은 이벤트 객체의 stopPropagation 메소드로 막을 수 있다.
자식 요소에서 부모 요소로 이벤트가 전파되는데 이를 이벤트 버블링이라고 한다.
이벤트 위임 (Event Delegation)이는 부모요소에 이벤트가 발생해도 처리되기 때문에 if문으로 자식 요소에 한해 작동하게끔 처리 해줄 수 있다.
부모 요소에서 한 번에 자식 요소들에 발생한 이벤트를 관리할 수도 있다.
브라우저의 기본 동작(ex: 마우스 오른쪽 버튼을 클릭하면 상황에 맞는 메뉴 창이 뜬다거나, input 태그에 커서를 두고 키보드 키를 누르면 해당 값이 입력된다거나..)
이는 preventDefault 메소드를 통해 막을 수 있다.
브라우저에는 각 태그별 혹은 상황별로 기본적으로 약속된 동작이 있다.
다양한 이벤트 알아보기
마우스 버튼 이벤트값 내용
0
마우스 왼쪽 버튼
1
마우스 휠
2
마우스 오른쪽 버튼
3
X1 (일반적으로 브라우저 뒤로 가기 버튼)
4
X2 (일반적으로 브라우저 앞으로 가기 버튼)
mouseenter, mouseleave, mouseover, mouseout, mousemove 등 이동 관련 이벤트에서는 위 값이 다 0.
마우스 이벤트 객체의 버튼 프로퍼티를 활용하면 어떤 버튼을 입력했는지 알 수 있다.
마우스 이벤트 타입이벤트 타입 설명
mousedown
마우스 버튼을 누르는 순간
mouseup
마우스 버튼을 눌렀다 떼는 순간
click
왼쪽 버튼을 클릭한 순간
dblclick
왼쪽 버튼을 빠르게 두 번 클릭한 순간
contextmenu
오른쪽 버튼을 클릭한 순간
mousemove
마우스를 움직이는 순간
mouseover
마우스 포인터가 요소 위로 올라온 순간
mouseout
마우스 포인터가 요소에서 벗어나는 순간
mouseenter
마우스 포인터가 요소 위로 올라온 순간 (버블링이 일어나지 않음)
mouseleave
마우스 포인터가 요소에서 벗어나는 순간 (버블링이 일어나지 않음)
마우스 이동 이벤트프로퍼티 설명
clientX, clientY
마우스 포인터의 브라우저 표시 영역에서의 위치
pageX, pageY
마우스 커서의 문서 영역에서의 위치
offsetX, offsetY
마우스 포인터의 이벤트 발생한 요소에서의 위치
screenX, screenY
마우스 포인터의 모니터 화면 영역에서의 위치
마우스 이벤트 객체에서 마우스 포인트의 위치와 관련된 프로퍼티이다.
mouseenter, mouseleave, mouseover, mouseout 이벤트에는 relatedTarget이라는 프로퍼티가 존재하는데, target 프로퍼티가 이벤트가 발생한 요소를 담고 있다면, relatedTarget 프로퍼티는 이벤트가 발생하기 직전(또는 직후)에 마우스가 위치해 있던 요소를 담고 있다.
키보드 이벤트이벤트 타입 설명
keydown
키보드의 버튼을 누르는 순간
keypress
키보드의 버튼을 누르는 순간 ('a', '5' 등 출력이 가능한 키에서만 동작하며, Shift, Esc 등의 키에는 반응하지 않음)
keyup
키보드의 버튼을 눌렀다 떼는 순간
키보드 이벤트 객체에는 key와 code 프로퍼티가 있다.
key는 사용자가 누른 키가 가지고 있는 값을 나타내고 code는 누른 키의 물리적인 위치를 나타낸다.
input 태그 다루기이벤트 타입 설명
focusin
요소에 포커스가 되는 순간
focusout
요소에 포커스가 빠져나가는 순간
focus
요소에 포커스가 되는 순간 (버블링이 일어나지 않음)
blur
요소에 포커스가 빠져나가는 순간 (버블링이 일어나지 않음)
change
입력된 값이 바뀌는 순간
input
값이 입력되는 순간
select
입력 양식의 하나가 선택되는 순간
submit
폼을 전송하는 순간
스크롤 이벤트
scrollY 프로퍼티를 활용하면 스크롤된 특정한 위치를 기준으로 이벤트 핸들러가 동작하게 하거나 혹은 스크롤 방향(위로 스크롤 중인지/아래로 스크롤 중인지)을 기준으로 이벤트 핸들러가 동작하게끔 활용할 수도 있다.