15-2. JS DOM์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ(event ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ, ์˜ˆ์•ฝ์–ด this, addEventListener(), CSS ์†์„ฑ ์ ‘๊ทผํ•˜๊ธฐ)

2021. 10. 22. 17:06ใ†HTML + CSS + JS

728x90

1. DOM ์š”์†Œ์— ํ•จ์ˆ˜ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๊ธฐ 

id๊ฐ€ cup ์ธ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€ ์ด ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด alert ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค.

 

2. ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐํ•˜๊ธฐ 

id๊ฐ€ cup ์ธ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์™€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊ฟˆ 

 

3. DOM์˜ event ๊ฐ์ฒด ์•Œ์•„๋ณด๊ธฐ 

DOM์—๋Š” ์ด๋ฒคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” event ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค. 

์ด ๊ฐ์ฒด์—๋Š” ์›น ๋ฌธ์„œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

 

event ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ 

 

1๏ธโƒฃ ํ”„๋กœํผํ‹ฐ 

altKey : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ alt ํ‚ค๋ฅผ ๋ˆŒ๋ €๋Š” ์ง€ ์—ฌ๋ถ€๋ฅผ boolean ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

button : ๋งˆ์šฐ์Šค์—์„œ ๋ˆ„๋ฅธ ๋ฒ„ํŠผ์˜ ํ‚ค ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  

charCode : keypress ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์–ด๋–ค ํ‚ค๋ฅผ ๋ˆŒ๋ €๋Š”์ง€ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

clientX : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ€๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

clientY : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์„ธ๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

ctrlKey : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ  Ctrl ๋ฅผ ๋ˆŒ๋ €๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ boolean ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

pageX : ํ˜„์žฌ ๋ฌธ์„œ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ€๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

pageY : ํ˜„์žฌ ๋ฌธ์„œ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์„ธ๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

screenX : ํ˜„์žฌ ํ™”๋ฉด ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฐ€๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

screenY : ํ˜„์žฌ ํ™”๋ฉด์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์„ธ๋กœ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  

shiftKey : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ shift ํ‚ค๋ฅผ ๋ˆŒ๋ €๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ boolean ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

target : ์ด๋ฒคํŠธ๊ฐ€ ์ตœ์ดˆ๋กœ ๋ฐœ์ƒํ•œ ๋Œ€์ƒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

timeStamp : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

type : ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

which : ํ‚ค๋ณด๋“œ์™€ ๊ด€๋ จ๋œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ‚ค์˜ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

 

2๏ธโƒฃ ๋ฉ”์„œ๋“œ

preventDefault() : ์ด๋ฒคํŠธ๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ทจ์†Œํ•œ๋‹ค. 

 

 

4. this ์˜ˆ์•ฝ์–ด 

event ๊ฐ์ฒด์—๋Š” ์ด๋ฒคํŠธ ์ •๋ณด๋งŒ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๋Œ€์ƒ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ this ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. 

this.src -> ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ์•Œ์•„๋ƒ„ 

 

5. addEventListener() ๋ฉ”์„œ๋“œ 

addEventListener() ๋ฉ”์„œ๋“œ์™€ event ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ์š”์†Œ์— ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์—ฐ๊ฒฐํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์š”์†Œ.addEventListener(์ด๋ฒคํŠธ, ํ•จ์ˆ˜, ์บก์ณ ์—ฌ๋ถ€); 

1๏ธโƒฃ ์ด๋ฒคํŠธ : ์ด๋ฒคํŠธ ์œ ํ˜•์„ ์ง€์ •ํ•œ๋‹ค. 

2๏ธโƒฃ ํ•จ์ˆ˜ : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์‹คํ–‰ํ•  ๋ช…๋ น์ด๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. event ๊ฐ์ฒด๋ฅผ ์ธ์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค. 

3๏ธโƒฃ ์บก์ฒ˜์—ฌ๋ถ€ : ์ด๋ฒคํŠธ๋ฅผ ์บก์ฒ˜ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ true์ด๋‹ค. 

true๋Š” ์บก์ฒ˜๋ง, false๋Š” ๋ฒ„๋ธ”๋ง์ด๋‹ค. ์บก์ฒ˜๋ง์€ dom ์—์„œ ๋ถ€๋ชจ๋…ธ๋“œ์—์„œ ์ž์‹ ๋…ธ๋“œ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด๊ณ , ๋ฒ„๋ธ”๋ง์€ dom ์˜ ์ž์‹ ๋…ธ๋“œ์—์„œ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

์œ„์™€ ๊ฐ™์ด ๋™์ž‘ํ•จ. 

 

6. CSS ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ธฐ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํƒ€์ผ ์†์„ฑ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ๊ทธ ๊ฐ’์„ ์›ํ•˜๋Š”๋Œ€๋กœ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

document.์š”์†Œ๋ช….style.์†์„ฑ๋ช… 

 

* ์—ฐ์Šต๋ฌธ์ œ 

6๊ฐœ์˜ ๋‚˜์—ด๋œ ์ด๋ฏธ์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ํด๋ฆญํ•˜๋ฉด ํฌ๊ฒŒ ๋ณด์˜€๋‹ค๊ฐ€ ํ•œ๋ฒˆ ๋” ํด๋ฆญํ•˜๋ฉด ์‚ฌ๋ผ์ง€๋„๋ก ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ 

<!DOCTYPE html>
<html lang="ko">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
    <title>๋ผ์ดํŠธ๋ฐ•์Šค</title>
    <link rel="stylesheet" href="css/lightbox.css">
  </head>
  <body>
    <div class="row">
      <ul>
        <li><img src="images/tree-1-thumb.jpg" data-src="images/tree-1.jpg" class="pic"></li>
        <li><img src="images/tree-2-thumb.jpg" data-src="images/tree-2.jpg" class="pic"></li>
        <li><img src="images/tree-3-thumb.jpg" data-src="images/tree-3.jpg" class="pic"></li> 
        <li><img src="images/tree-4-thumb.jpg" data-src="images/tree-4.jpg" class="pic"></li>
        <li><img src="images/tree-5-thumb.jpg" data-src="images/tree-5.jpg" class="pic"></li>
        <li><img src="images/tree-6-thumb.jpg" data-src="images/tree-6.jpg" class="pic"></li>          
      </ul>    
    </div>
    <div id="lightbox">
			<img src="images/tree-1.jpg" alt="" id="lightboxImage">			
    </div>

    <script>
      var pics = document.getElementsByClassName("pic");
      var lightbox = document.getElementById("lightbox");
      var lightboxImage = document.getElementById("lightboxImage");

      for(i = 0; i< pics.length; i++) {
        pics[i].addEventListener("click", showLightbox);
      }

      function showLightbox() {
        var bigLocation = this.getAttribute("data-src");
        lightboxImage.setAttribute("src", bigLocation);
        lightbox.style.display = "block";
      }

      lightbox.onclick = function() {
        lightbox.style.display = "none";
      }
    </script>
  </body>
</html>

 

 

 

 

 

 

 

 

728x90