๐ก ๋์ ! ์ค์ต ๋ผ์ดํธ ๋ฐ์ค ํจ๊ณผ ๋ง๋ค๊ธฐ
์์์ ๋ฐฐ์ด ๋ด์ฉ์ ํ ๋๋ก ํด๋ฆญํ๋ฉด ๋ด์ฉ์ ์์ฑ์ด ๋ฐ๋๋ ๋ผ์ดํธ ๋ฐ์ค ํจ๊ณผ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
โ๏ธ css
<style> * { margin: 0px; padding: 0px; } .row { width: 1520px; height: auto; margin: 160px auto; } .row > ul { display: flex; flex-wrap: wrap; gap: 40px; list-style: none; } /* ๋ผ์ดํธ ๋ฐ์ค ์์ญ */ #light_box { position: absolute; top: 0px; left: 0px; width: 100vw; height: 100vh; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; display: none; } </style>
โ๏ธ html
<body> <div class="row"> <ul> <!-- 1 --> <li> <img src="./img/img_tumb-1.png" alt="์ธ๋ค์ผ์ด๋ฏธ์ง" data-src="img/img-1.jpg" class="pic" /> </li> <!-- 2 --> <li> <img src="./img/img_tumb-2.png" alt="์ธ๋ค์ผ์ด๋ฏธ์ง" data-src="img/img-2.jpg" class="pic" /> </li> <!-- 3 --> <li> <img src="./img/img_tumb-3.png" alt="์ธ๋ค์ผ์ด๋ฏธ์ง" data-src="img/img-3.jpg" class="pic" /> </li> <!-- 4 --> <li> <img src="./img/img_tumb-4.png" alt="์ธ๋ค์ผ์ด๋ฏธ์ง" data-src="img/img-4.jpg" class="pic" /> </li> <!-- 5 --> <li> <img src="./img/img_tumb-5.png" alt="์ธ๋ค์ผ์ด๋ฏธ์ง" data-src="img/img-5.jpg" class="pic" /> </li> <!-- 6 --> <li> <img src="./img/img_tumb-6.png" alt="์ธ๋ค์ผ์ด๋ฏธ์ง" data-src="img/img-6.png" class="pic" /> </li> </ul> </div> <!-- ๋ผ์ดํธ ๋ฐ์ค --> <div id="light_box"> <img src="./img/img-1.jpg" alt="ํฐ ์ด๋ฏธ์ง" id="light_box_img" /> </div>
โ๏ธ js
<script> let pic = document.getElementsByClassName("pic"); //์ธ๋ค์ผ 6์ฅ let lightBox = document.getElementById("light_box"); //๋ผ์ดํธ ๋ฐ์ค ์์ญ let lightBoxImg = document.getElementById("light_box_img"); //๋ผ์ดํธ ๋ฐ์ค์ ํฐ์ด๋ฏธ์ง //์ธ๋ค์ผ 6์ฅ์ ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด์ค๋๋ค. for (let i = 0; i < pic.length; i++) { pic[i].addEventListener("click", showLightBox); } //์ธ๋ค์ผ์ ํด๋ฆญํ๋ฉด ์คํํ ์ด๋ฒคํธ function showLightBox() { let bigLocation = this.getAttribute("data-src"); //์ธ๋ค์ผ ์ด๋ฏธ์ง์ ํฐ ์ด๋ฏธ์ง ๊ฒฝ๋ก //๋ผ์ดํธ ๋ฐ์ค ์์ ํฐ ์ด๋ฏธ์ง์ ๊ฒฝ๋ก๋ฅผ data-src์ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค. lightBoxImg.setAttribute("src", bigLocation); //๋ผ์ดํธ ๋ฐ์ค ์์ญ์ ๋ํ๋ ๋๋ค. lightBox.style.display = "flex"; } //๋ผ์ดํธ ๋ฐ์ค๋ฅผ ๊ฐ์ถฅ๋๋ค. lightBox.onclick = function () { lightBox.style.display = "none"; }; </script>
๐ก DOM์์ ๋ ธ๋ ์ถ๊ฐ ์ญ์ ํ๊ธฐ
DOM์์ ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋ค์ด ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ค๋ฉด node list๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ ธ๋ ๋ฆฌ์คํธ๋ DOM์ ์ ๊ทผํ ๋ querySelectorAll()๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด
๋ ธ๋๋ฅผ ํ๊บผ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ด๋, ๋ ธ๋์ ์ ๋ณด๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ฅํ ๊ฒ์ด ๋ฐ๋ก ๋ ธ๋ ๋ฆฌ์คํธ๋ผ๊ณ ํฉ๋๋ค.
๋ฐฐ์ด๊ณผ ๋น์ทํ๊ฒ ์๊ฒผ์ผ๋ฉฐ, ๋น์ทํ๊ฒ ๋์ํฉ๋๋ค.
๋ ธ๋ ๋ฆฌ์คํธ์๋ ์ธ๋ฑ์ค์ ์์๊ฐ์ด ์ ์ฅ๋๊ณ lenght์์ฑ์ ๋ช ๊ฐ์ ๋ ธ๋๊ฐ ์ ์ฅ๋์ด ์๋์ง ํ์๋ฉ๋๋ค.
๋ ธ๋ ๋ฆฌ์คํธ๋ ๋ฐฐ์ด์ฒ๋ผ ์๊ฒผ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด ๋ฌธ๋ฒ์ ์ด์ฉํ๋ฉด ํน์ ์๋ฒ์งธ์ ์๋ ํ๊ทธ๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค.
[๊ธฐ๋ณธํ] document.querySelectorAll('์์')[index]
๐ก ํ ์คํธ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ ์๋ก์ด ์์ ์ถ๊ฐํ๊ธฐ
1. ์์ ๋ ธ๋ ๋ง๋ค๊ธฐ
: DOM์์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ ๋ ๊ฐ์ฅ ๋จผ์ ํ ์ผ์ ์์ ๋ ธ๋๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ด๋ ์ฌ์ฉํ๋ ๋ฉ์๋๋ .createElement()๋ฉ์๋ ์ ๋๋ค.
-
[๊ธฐ๋ณธํ]
document.createElement(๋ ธ๋๋ช ) ๋ ธ๋๋ช ์ ํ๊ทธ์ ์ด๋ฆ์ ๋๋ค.
2. ํ ์คํธ ๋ ธ๋ ๋ง๋ค๊ธฐ
: ์๋ก์ด ์์ ๋ ธ๋๋ฅผ ๋ง๋ค์๋ค๋ฉด ๊ทธ ๋ค์์ ๋ด์ฉ์ ๋ด๋ ํ ์คํธ ๋ ธ๋๋ฅผ '์์๋ ธ๋'๋ก ๋ง๋ค์ด์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
ํ ์คํธ ๋ ธ๋๋ฅผ ๋ง๋๋ ๋ฉ์๋๋ .createTextNode() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
-
[๊ธฐ๋ณธํ]
document.createTextNode('ํ ์คํธ')
3. ์์ ๋ ธ๋ ์ฐ๊ฒฐํ๊ธฐ
: 1๋ฒ์์ ๋ง๋ค์๋ ๋ ธ๋์ 2๋ฒ์์ ๋ง๋ค์๋ ํ ์คํธ ๋ ธ๋๋ ๋ ธ๋๊ฐ ๋ง๋ค์ด์ง ์ํ์ผ ๋ฟ์ด๋ฉฐ
์์ง ๋ถ๋ชจ๋ ธ๋์ ์์๋ ธ๋๋ก ์ฐ๊ฒฐ๋์ง ์์ ์ํ์ ๋๋ค.
.appendChild()๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ ๋ ธ๋๋ ์์ฑ๋ ธ๋๋ฅผ ๋ง๋ ํ ์์ ๋ ธ๋์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
์ด๋ .appendChild()๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ฒฐํ๋ ๋ ธ๋๋ ์์ ๋ ธ๋ ์ค ๋งจ ๋์ ์ถ๊ฐ๋ฉ๋๋ค.
-
[๊ธฐ๋ณธํ]
๋ถ๋ชจ๋ ธ๋.appendChild(์์๋ ธ๋)