간단하게 정리
키보드 레이아웃에서 key를 mouse로 눌렀을 때 input에 입력이 되도록 구현
(backspace와 shift, space만 적용하고 특수 키 제외)
#keyboardEl
src/js/keyboard.js
#addEvent() {
this.#keyboardEl.addEventListener("mousedown", this.#onMouseDown);
document.addEventListener("mouseup", this.#onMouseUp);
}
#onMouseDown() {}
#onMouseUp() {}
#onMouseDown() {
event.target.closest("div.key")?.classList.add("active");
}
#onMouseUp(event) {
// key element 가져오고
const keyEl = event.target.closest("div.key");
// optional chaining,
// !undefined (true) !!undefined (false) (boolean으로 type casting), active 유무
const isActive = !!keyEl?.classList.contains("active");
const val = keyEl?.dataset.val; // key val 확인
// mouse로 누른 key를 input에 입력되게
if (isActive && !!val && val !== "Space" && val !== "Backspace") {
this.#inputEl.value += val; // 원래 가지고 있던 value에 val을 넣는다
}
// Space
if (isActive && val === "Space") {
this.#inputEl.value += " ";
}
// Backspace (마지막 String을 잘라내기)
if (isActive && val === "Backspace") {
this.#inputEl.value = this.#inputEl.value.slice(0, -1);
}
this.#keyboardEl.querySelector(".active")?.classList.remove("active");
}
- 자바스크립트 (JavaScript) 느낌표 두개 (Double Exclamation Marks) 연산자 (Operator), !!
- How to Convert a Value to a Boolean in JavaScript
- 자바스크립트 느낌표 두개
느낌표 두개(!!) 연산자는 확실한 논리결과를 가지기 위해 사용한다. 예를 들어 정의되지 않은 변수 undefined 값을 가진 내용의 논리 연산 시에도 확실한 true / false를 가지도록 하는게 목적
느낌표 두개(!!) 는 undefined, "", 0 값은 false. 그외에는 true 값을 리턴함, 값이 존재하는지 자바스크립트에서 사용할때 사용하면 편리함
export class Keyboard {
// 판별
#keyPress = false;
#mouseDown = false;
...
}
// 마우스를 뗐을 때
#onMouseUp(event) {
// prevent
if (this.#keyPress) return;
this.#mouseDown = false;
}
// 마우스를 눌렀을 때
#onMouseDown(event) {
// prevent
if (this.#keyPress) return;
this.#mouseDown = true;
}
// 키보드를 눌렀을 때
#onKeyDown(event) {
// prevent
if (this.#mouseDown) return;
this.#keyPress = true;
}
// 키보드를 뗐을 때
#onKeyUp(event) {
// prevent
if (this.#mouseDown) return;
this.#keyPress = false;
}
😀
이중부정하니까 문득 생각난거..