PointerEvent ์์ฑ
KeyboardEvent ๊ฐ์ฒด ํ์ธ
keyCode => key
const btnEl = document.querySelector("button");
btnEl.addEventListener("click", function(e) {
console.log("๋ฒํผ์ด ๋๋ ค์ก์ต๋๋ค." + e);
console.log("x์ขํ : " + e.clientX);
console.log("y์ขํ : " + e.clientY);
console.log("๋ง์ฐ์ค๊ฐ ํด๋ฆญ๋ x ์ขํ : " + e.pageX);
console.log("๋ง์ฐ์ค๊ฐ ํด๋ฆญ๋ y ์ขํ : " + e.pageY);
console.log("๋ชจ๋ํฐ์ ์ผ์ชฝ ๋ชจ์๋ฆฌ ๊ธฐ์ค์ผ๋ก ๋ง์ฐ์ค๊ฐ ํด๋ฆญ๋ x ์ขํ : " + e.screenX);
console.log("๋ชจ๋ํฐ์ ์ผ์ชฝ ๋ชจ์๋ฆฌ ๊ธฐ์ค์ผ๋ก ๋ง์ฐ์ค๊ฐ ํด๋ฆญ๋ y์ถ ์ขํ : " + e.screenY);
});
const inputEl = document.querySelector("input");
inputEl.addEventListener("keydown", function(event) {
console.log(`key : ${event.key}`);
console.log(`ctrlKey : ${event.ctrlKey}`);
console.log(`altKey : ${event.altKey}`);
console.log(`shiftKey : ${event.shiftKey}`);
});
์ด๋ฒคํธ ์ทจ์ํ๊ธฐ
- HTML ํ๊ทธ ์ค ์ผ๋ถ๋ ๊ธฐ๋ณธ์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ ์ฉ๋์ด ์์ต๋๋ค.
๋ํ์ ์ผ๋ก a ํ๊ทธ์ form ํ๊ทธ๊ฐ ํด๋น ๋ฉ๋๋ค. - target ์์ฑ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ฅผ ๋ํ๋ ๋๋ค. (React์์ ํ์ธ ์์ )
- preventDefault() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๊ทธ์ ๊ธฐ๋ณธ์ผ๋ก ์ฐ๊ฒฐ๋ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํ ์ ์์ต๋๋ค.
form ํ๊ทธ์ addEventListner() ๊ฑธ ๋ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉํ ๋ ๊ธฐ๋ณธ์ผ๋ก ์ฐ๊ฒฐ๋ ์ด๋ฒคํธ๋ฅผ ์ทจ์ํด์ค์ผ ํจ.
const aEls = document.querySelectorAll("a");
for(let e of aEls) {
e.addEventListener("click", function(event) {
// ๊ธฐ๋ณธ ์ด๋ฒคํธ ์ทจ์
event.preventDefault();
});
}
const formEl = document.getElementById("myForm");
formEl.addEventListener("submit", function(event) {
// ๊ธฐ๋ณธ ์ด๋ฒคํธ ์ทจ์
event.preventDefault(); // ํผ ์ ์ถ ๊ธฐ๋ณธ ๋์ ๋ง๊ธฐ
});
this ํค์๋ ์ฌ์ฉํ๊ธฐ
- ์ด๋ฒคํธ ํจ์ ๋ด๋ถ์์ this ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์ ๋
ธ๋๋ฅผ ๋ฐ๋ก ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค.
(์ด๋ฒคํธ๋ฅผ ๋ฐ์ html ์์)
const pEls = document.querySelectorAll("#p1");
const pEls2 = document.querySelectorAll("#p2");
// for(let el of pEls) {}; ๊ณผ pEls.forEach((el) => {});์ ๊ฐ๋ค.
pEls.forEach((el) => {
el.addEventListener("click", function() {
if(this.style.color === "red") { // ์ฌ๊ธฐ์์ this๋ ํ์ฌ ์ด๋ฒคํธ๊ฐ ๋๋ ค์ง ์์
this.style.color = "black";
} else this.style.color = "red";
});
});
pEls2.forEach((el) => {
el.addEventListener("click", () => {
if(el.style.color === "red") {
el.style.color = "black";
} else el.style.color = "red";
});
});
this ํค์๋ ์ฌ์ฉ์ ์ฃผ์ ํ ์ !
์ด๋ฒคํธ ํจ์๋ฅผ ํ์ดํ ํจ์๋ก ์์ฑํ๋ฉด this์ ๋ฒ์๊ฐ ๋ฌ๋ผ์ ธ์ this๊ฐ ์ด๋ฒคํธ ๋ฐ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค์ง ์์ต๋๋ค.
(์๋ addEventListener()์ ์ฝ๋ฐฑํจ์์์๋ this์ ํด๋น ์ด๋ฒคํธ๊ฐ ๋ฆฌ์ค๋๊ฐ ํธ์ถ๋ ์๋ฆฌ๋จผํธ๊ฐ ๋ฐ์ธ๋ฉ ๋๋๋ก ์ ์๋์ด ์์ต๋๋ค. ์ด์ฒ๋ผ ์ด๋ฏธ this์ ๊ฐ์ด ์ ํด์ ธ ์๋ ์ฝ๋ฐฑ ํจ์์ ๊ฒฝ์ฐ, ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ๋ฐ์ธ๋ฉ ๊ฐ์ด ์ฌ๋ผ์ง๊ณ ์์ ์ค์ฝํ๊ฐ ๋ฐ์ธ๋ฉ ๋๊ธฐ ๋๋ฌธ์ ์๋ํ๋ ๋๋ก ๋์ํ์ง ์์ ์ ์์ต๋๋ค.)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id="p1">text-1</p>
<p id="p1">text-2</p>
<p id="p1">text-3</p>
<br>
<p id="p2">test-1</p>
<p id="p2">test-2</p>
<p id="p2">test-3</p>
<script src="./230403_์ด๋ฒคํธthis.js"></script>
</body>
</html>
์ค์ต ์์ - ์ํ๊ด ์๋งค
- ๋ฉ๋ด๋ [1] ์๋งคํ๊ธฐ [2] ์ ์ฐํ๊ธฐ
- ์ฌ์ฉ์๋ก๋ถํฐ ์ข์๋ฒํธ๋ฅผ ์ ๋ ฅ ๋ฐ์ ์๋งคํ๋ ์์คํ ์ด๋ค. (์ข์์ ์ด 10๊ฐ)
- ์ด๋ฏธ ์๋งค๊ฐ ์๋ฃ๋ ์ข์์ ์ฌ๊ตฌ๋งค ๋ถ๊ฐ
- ํ ์ข์๋น ๊ฐ๊ฒฉ์ 12000์
- [์ ์ฐํ๊ธฐ] ํด๋ฆญ์ ํด๋น ์ํ๊ด์ ์ด ๋งค์ถ์ก ์ถ๋ ฅ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./230403_3_์ํํ์๋งค.css">
<title>Document</title>
</head>
<body>
<h1>๐ฎ ์๋งค ์์คํ
๐ฟ</h1>
<div class="button-container">
<button id="reserve">์๋งคํ๊ธฐ</button>
<button id="quit">์ ์ฐํ๊ธฐ</button>
</div>
<div id="seat">
<div class="seatInput">
<label for="seatNum">์ข์ ๋ฒํธ</label>
<input type="text" id="seatNum">
<button type="submit" id="reserveBtn">์๋งค</button>
</div>
<div class="seat-container">
<div class="seat-item 1"></div>
<div class="seat-item 2"></div>
<div class="seat-item 3"></div>
<div class="seat-item 4"></div>
<div class="seat-item 5"></div>
<div class="seat-item 6"></div>
<div class="seat-item 7"></div>
<div class="seat-item 8"></div>
<div class="seat-item 9"></div>
<div class="seat-item 10"></div>
</div>
</div>
<h1 id="result"></h1>
<script src="./230403_3_์ํํ์๋งค.js"></script>
</body>
</html>
* {
box-sizing: border-box;
}
body {
width: 100%;
}
#seat {
display: none;
}
.seatInput {
display: flex;
margin: 20px 0;
justify-content: center;
align-items: center;
gap: 10px;
}
.button-container {
display: flex;
gap: 10px;
justify-content: center;
align-items: center;
}
.button-container button {
width: 80px;
height: 40px;
background-color: #e2e7f7;
border: none;
box-shadow: 1px 1px 1px #696969;
cursor: pointer;
}
#reserveBtn {
background-color: #e2e7f7;
cursor: pointer;
border: none;
box-shadow: 1px 1px 1px #696969;
}
.seat-container {
display: flex;
justify-content: center;
align-items: center;
margin: 20px 0;
gap: 10px;
}
.seat-item {
width: 40px;
height: 40px;
border: 1px solid #696969;
}
#result, h1 {
text-align: center;
}
const reserveEl = document.querySelector("#reserve");
reserveEl.addEventListener("click", function() {
const seatEl = document.querySelector("#seat");
if(seatEl.style.display == 'none') {
seatEl.style.display = 'block';
} else seatEl.style.display = 'none';
});
const seat = document.querySelectorAll(".seat-item");
const reserveBtn = document.querySelector("#reserveBtn");
reserveBtn.addEventListener("click", function() {
const seatNum = document.getElementById("seatNum").value;
for(let e of seat) {
let tmp = e.className.substring(10);
if(tmp == seatNum) {
if(e.style.backgroundColor == "royalblue") {
alert("์ด๋ฏธ ์๋งค๊ฐ ์๋ฃ๋ ์ข์ ์
๋๋ค.");
} else {
e.style.backgroundColor = "royalblue";
alert("์๋งค๊ฐ ์๋ฃ๋์์ต๋๋ค.");
}
const inputBox = document.querySelector("#seatNum");
inputBox.value = "";
document.getElementById("seatNum").focus();
}
}
});
const quitEl = document.querySelector("#quit");
quitEl.addEventListener("click", function() {
let cnt = 0;
seat.forEach((e) => {
if(e.style.backgroundColor == "royalblue") {
cnt++;
}
});
document.getElementById("result").innerHTML = "์ด ๋งค์ถ : " + cnt * 12000 + "์";
});
'๐จ Frontend > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฆVanilla JS (10) JSON (0) | 2023.04.05 |
---|---|
๐ฆVanilla JS (9) ์ ๊ท ํํ์ (0) | 2023.04.05 |
๐ฆVanilla JS 8-(1) ์ด๋ฒคํธ ๋ค๋ฃจ๊ธฐ + ์ค์ต ์์ 3๊ฐ (0) | 2023.04.01 |
๐ฆVanilla JS โฆ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(DOM), ํฌ๋๋ฆฌ์คํธ ์์ (1) | 2023.03.30 |
๐ฆVanilla JS โฅ ํด๋์ค (์๋ฐ class VS ์๋ฐ์คํฌ๋ฆฝํธ class) (0) | 2023.03.29 |