체크 박스가 체크드 되면 html 요소의 theme 속성이 dark-mode로 바뀌고
이에 미리 설정해둔 선택자로 filter 속성으로 색상을 변경 시킨다.
html[theme="dark-mode"] {
filter: invert(100%) hue-rotate(180deg);
}
filter
속성의 invert
는 0~100%로 설정 할 수 있는데 해당 수치가 높을 수록 다이나믹 하게 색상이 변경되고 hue-rotate
는 0~360deg로 설정 할 수 있는데 deg에 따른 색상 변화는 아래 표를 참고하자.
select
요소 하위의 option
요소의 value
속성에 font-family
값을 저장해 두었다가 select
박스가 선택되면 해당되는 value
를 document.body.fontFamily
에 할당을 해서 폰트를 동적으로 변경한다. 코드는 아래와 같다.
#onChangeFont(event) {
document.body.style.fontFamily = event.target.value;
}
keydown
: 키를 누르고 있을때 발생하는 이벤트keyup
: 키를 떼면 그 순간 발생하는 이벤트document
에 할당 해준다.키보드 이벤트 발생시 event.code
로 현재 누르고 있는 키보드 키가 무엇인지 확인 할 수 있는데 이것을 키보드 값마다 data-code: "event.code"
로 저장해서 이벤트가 발생할 때마다 대조한 뒤 background-color
를 변경 해준다.
한글을 입력해서 에러 표시를 나타내는 기능은 정규표현식으로 event.key
값이 한글인지 여부를 확인 하여 error 클래스를 추가한다.
// 입력한 키가 한글일 때 (정규표현식을 사용) error 클래스를 추가
this.#inputGroupEl.classList.toggle(
"error",
/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/.test(event.key)
);
private class fields : #
키워드를 private 접근제어자로 사용 할 수 있다.
input checkbox, select 요소 모두 변화된 value
를 확인하기 위해서는 change
이벤트를 할당시킨다.
event.bubbles
로 현재 요소에서 이벤트 버블링이 일어나는지 여부를 알 수 있다.
요소를 찾을 때 document
는 가급적 한번만 사용하는게 좋다.
ex) main > ul
const mainEl = document.querySelector('main');
const ulEl = mainEl.querySelector('ul');
/* 안좋은 예, document를 굳이 두번 쓸 필요는 없다. 최대한 줄이자.
const mainEl = document.querySelector('main');
const ulEl = document.querySelector('ul');*/
element.classList.toggle('클래스명', '조건')
toggle의 두번째 인수에는 boolean 타입이 들어 간다. 즉, 두번째 인수가 true이면 classList.add()
가 발동 되고 false이면 classList.remove()
가 발동된다.