ํฐ์คํ ๋ฆฌ ๋ทฐ
๐์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด๋?
๊ฑฐํ์ด ๊ณ์ํด์ ์ปค์ง๋ ๊ฒ์ฒ๋ผ ๋ด๋ถ์ ๋ฐ์ํ ์ด๋ฒคํธ๊ฐ ์ธ๋ถ๋ฌ ๋ป์ด๋๊ฐ๋ ํ์์ด๋ค.
์์๋ก ์๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ๋ค.
๋ชจ๋ฌ์ฐฝ ์ธํ
[index.html]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- css ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ -->
<link rel="stylesheet" href="styles.css">
<title>Document</title>
</head>
<body>
<div>๋ณธ๋ฌธ</div>
<button class="modal-btn">๋ชจ๋ฌ์ด๊ธฐ</button>
<div class="modal">
<div class="modal-content">
<input class="์์ด๋" type="text" placeholder="์์ด๋" />
<input class="๋น๋ฐ๋ฒํธ" type="password" placeholder="๋น๋ฐ๋ฒํธ" />
<button class="login">๋ก๊ทธ์ธํ๊ธฐ</button>
<button class="close-btn">๋ซ๊ธฐ</button>
</div>
</div>
<!-- ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ -->
<script src="script.js"></script>
</body>
</html>
[styles.css]
.modal {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-color: gray;
opacity: 0.8;
/* ์ถ๊ฐ */
display: none;
padding-top: 100px;
}
.modal-content {
width: 200px;
height: 200px;
background-color: white;
padding: 20px;
margin: auto;
}
/* ์ถ๊ฐ */
.show {
display: block;
}
[script.js]
function ๋ชจ๋ฌ์ฐฝ์ด๋ซ() {
document.querySelector(".modal").classList.toggle("show");
}
document.querySelector(".modal-btn").addEventListener("click", ๋ชจ๋ฌ์ฐฝ์ด๋ซ);
document.querySelector(".close-btn").addEventListener("click", ๋ชจ๋ฌ์ฐฝ์ด๋ซ);
๋ชจ๋ฌ์ฐฝ ์ธ๋ถ์ ํ์ ๋ฐฐ๊ฒฝ ํด๋ฆญ ์ ๋ชจ๋ฌ์ฐฝ์ด ๋ซํ๋๋ก ๊ตฌํ
1. ํ์ ๋ฐฐ๊ฒฝ ํ๊ทธ ๊ฐ์ ธ์ค๊ธฐ
document.querySelector(".modal");
2. ํ์ ๋ฐฐ๊ฒฝ ํด๋ฆญ ์ด๋ฒคํธ ๋ฑ๋กํ๊ธฐ
document.querySelector(".modal").addEventListener("click", function ํจ์๋ช
() {})
3. ํด๋ฆญ ์ด๋ฒคํธ ์ ๋ชจ๋ฌ์ฐฝ ๋ซํ๋๋ก ๊ตฌํํ๊ธฐ
document.querySelector(".modal").addEventListener("click", function ํจ์๋ช
() {
document.querySelector(".modal").classList.remove("show");
})
<div> // ์๋ฅผ ํด๋ฆญํ๊ฒ ๋จ
<div> // ์๋ฅผ ํด๋ฆญํ๋ฉด
ํํณ
</div>
<div>
=> ๋ชจ๋ฌ์ฐฝ ๋ด๋ถ๋ฅผ ํด๋ฆญํด๋ ํ์ ๋ฐฐ๊ฒฝ์ ํด๋ฆญํ ๊ฒ์ฒ๋ผ ์ธ์ํจ
๐ํด๊ฒฐ๋ฐฉ๋ฒ
์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๋ง์์ผ ํ๋ค!
event ๊ฐ์ฒด ์ฌ์ฉํ๊ธฐ(์ด๋ฒคํธ ๋ฑ๋ก ์ ์๋์ผ๋ก ์๊ธด๋ค.)
document.querySelector(".modal").addEventListener("click", function ํจ์๋ช
(event) {
// ์ฌ๊ธฐ์ ์ด๋ฒคํธ ํ์ฉ ๊ฐ๋ฅ
event.target; // ์ฌ์ฉ์๊ฐ ๋๋ฅธ ํ๊ทธ
event.currentTarget; // ์ด๋ฒคํธ๊ฐ ๋ฑ๋ก๋ ํ๊ทธ ex) document.querySelector(".modal")
event.preventDefault(); // ๊ธฐ๋ณธ ๋์ ๋ง์ ex) form ์ ์ถ ์ ์๋ก๊ณ ์นจ ๋ง์
event.stopPropagation(); // ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ๋ง์์ค
});
๋ฌธ์
event.target์ ์ฌ์ฉํด์ ํ์ ๋ฐฐ๊ฒฝ์ ํด๋ฆญํ ๋๋ง ๋ชจ๋ฌ์ฐฝ ๋ซํ๊ฒ ํ๊ธฐ.
document.querySelector(".modal").addEventListener("click", (event) => {
// ํด๋ฆญํ ๋์ด ๋ชจ๋ฌ ๋ฐฐ๊ฒฝ์ผ ๋ => ๋ซํ๊ฒ ํ๋ค.
if (ํด๋ฆญํ ๋ === ๋ชจ๋ฌ ๋ฐฐ๊ฒฝ ํ๊ทธ) {
๋ชจ๋ฌ์ฐฝ ์๋ณด์ด๊ฒ ํ๊ธฐ
}
});
'Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๐ฆ] ์๋~ ์ง๋๋ฒจ๋ก ์๋ ค๋๋ฆด๊ฒ์! (2) - async, await (0) | 2025.01.17 |
|---|---|
| [๐ฆ] localStorage (1) | 2025.01.17 |
| ๊ฐํน๊ฐ๋ค ํท๊ฐ๋ฆด ์ ์๋ ๋ฌธ์ ๋ค ! - ๋ฌธ์ ์ํ ์ค๋ต ํ์ด (1) | 2025.01.16 |
| [๐ฆ] ์๋~ ์ง๋๋ฒจ๋ก ์๋ ค๋๋ฆด๊ฒ์! (1) - promise (0) | 2025.01.16 |
| [๐ฆ] ๋ชจ๋ฌ์ฐฝ ์ฌ๋ฌ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ (0) | 2025.01.15 |