๐ŸŽจ Frontend/JavaScript

๐ŸฆVanilla JS 8-(1) ์ด๋ฒคํŠธ ๋‹ค๋ฃจ๊ธฐ + ์‹ค์Šต ์˜ˆ์ œ 3๊ฐœ

kongmi 2023. 4. 1. 08:29

  • ์ด๋ฒคํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์‚ฌ์šฉ์ž ์‚ฌ์ด์— ์ƒํ˜ธ์ž‘์šฉ์ด ๋ฐœ์ƒํ•˜๋Š” ํŠน์ • ์‹œ์ ์„ ์˜๋ฏธ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฒคํŠธ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์–ด๋–ค ์ž‘์—…์„ ํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ์˜ ์กฐ์ž‘์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์ข…๋ฅ˜

1. ์ธ๋ผ์ธ ๋ฐฉ์‹

<body>
  <button onclick="clickEvent()">์ธ๋ผ์ธ ๋ฐฉ์‹</button>
  
  <script src="./230331_2_0_์ด๋ฒคํŠธ๋“ฑ๋ก.js"></script>
</body>
// 1. ์ธ๋ผ์ธ ๋ฐฉ์‹
function clickEvent() {
  alert("์ธ๋ผ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!");
}

2. ์ด๋ฒคํŠธ ๋“ฑ๋ก ๋ฉ”์†Œ๋“œ(addEventListener())

  • DOM์—์„œ ์ œ๊ณตํ•˜๋Š” addEventListener() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

<๋…ธ๋“œ>.addEventListener("<์ด๋ฒคํŠธ ํƒ€์ž…>", <์ด๋ฒคํŠธ ํ•จ์ˆ˜>);

// โญ๏ธ 2. ์ด๋ฒคํŠธ ๋“ฑ๋ก ๋ฉ”์†Œ๋“œ ๋ฐฉ์‹
function eventFunc() {
  alert("์ด๋ฒคํŠธ ๋“ฑ๋ก ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ");
}
let regBtnEl = document.getElementById("reg_btn");
regBtnEl.addEventListener("click", eventFunc); // ์ฝœ๋ฐฑํ•จ์ˆ˜

์‹ค์Šต๋ฌธ์ œ(1) - ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด ๊ฒฝ๊ณ ์ฐฝ ์ถœ๋ ฅํ•˜๊ธฐ

<!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>
  <style>
    .container {
      display: flex;
      gap: 10px;
    }
    .item {
      width: 150px;
      height: 60px;
      text-align: center;
      font-size: 1.5em;
      border-radius: 10px;
      box-shadow: 2px 2px 2px #000;
      color: #171717;
      font-weight: bold;
      border: none;
    }
    .item1 {
      background: rgb(53,168,0);
      background: radial-gradient(circle, rgba(53,168,0,1) 0%, rgba(238,238,238,1) 100%);
    }
    .item2 {
      background: rgb(255,100,0);
      background: radial-gradient(circle, rgba(255,100,0,1) 0%, rgba(238,238,238,1) 100%);
    }
    .item3 {
      background: rgb(147,0,255);
      background: radial-gradient(circle, rgba(147,0,255,1) 0%, rgba(238,238,238,1) 100%);
    }
  </style>
</head>
<body>
  <div class="container">
    <button class="item item1">Green</button>
    <button class="item item2">Orange</button>
    <button class="item item3">Purple</button>
  </div>

  <script src="./230331_2_1_์‹ค์Šต๋ฌธ์ œ.js"></script>
</body>
</html>
// ์ด๋ฒคํŠธ ๋“ฑ๋ก ๋ฉ”์†Œ๋“œ ๋ฐฉ์‹
const green_box = document.querySelector(".item1");
green_box.addEventListener("click", function() {
  alert("green!!");
});

const orange_box = document.querySelector(".item2");
orange_box.addEventListener("click", function() {
  alert("orange!!");
});

const purple_box = document.querySelector(".item3");
purple_box.addEventListener("click", function() {
  alert("purple!!");
});

์‹ค์Šต๋ฌธ์ œ(2) - ๋ฒ„ํŠผ ํด๋ฆญํ•˜๋ฉด ๋ฐฐ๊ฒฝ์ƒ‰ ๋ฐ”๊พธ๊ธฐ

<!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>
  <style>
    .container {
      display: flex;
      flex-direction: column;
      gap: 10px;
      justify-content: center;
      align-items: center;
    }
    .sub-container {
      display: flex;
      gap: 10px;
    }
    .box {
      width: 30%;
      height: 150px;
      border-radius: 20px;
      border: 1px solid #bdbcbc;
    }
    .item {
      width: 150px;
      height: 40px;
      text-align: center;
      border-radius: 10px;
      color: #fff;
      font-weight: bold;
      border: none;
    }
    .item1 {
      background-color: green;
    }
    .item2 {
      background-color: orange;
    }
    .item3 {
      background-color: purple;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="sub-container">
      <button class="item item1">Green</button>
      <button class="item item2">Orange</button>
      <button class="item item3">Purple</button>
    </div>
    <div class="box"></div>
  </div>

  <script src="./230331_2_2_์‹ค์Šต๋ฌธ์ œ.js"></script>
</body>
</html>
const green_box = document.querySelector(".item1");
green_box.addEventListener("click", function() {
  const box = document.querySelector(".box");
  box.style.background = "green";
});

const orange_box = document.querySelector(".item2");
orange_box.addEventListener("click", function() {
  const box = document.querySelector(".box");
  box.style.background = "orange";
});

const purple_box = document.querySelector(".item3");
purple_box.addEventListener("click", function() {
  const box = document.querySelector(".box");
  box.style.background = "purple";
});

์‹ค์Šต๋ฌธ์ œ(3) - ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์ƒ์„ธ ์„ค๋ช… ํ‘œ์‹œ ๋ฐ ๋‹ซ๊ธฐ

<!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>
  <style>
    * {
      margin: 0;
    }
    .container {
      width: 400px;
      margin: 30px auto;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
    }
    .image {
      background-image: url("./แ„Žแ…กแ†ฏแ„…แ…ตแ„‘แ…ฎแ„‰แ…ณ.png");
      background-size: contain;
      background-repeat: no-repeat;
      width: 400px;
      height: 400px;
      position: relative;
    }
    .desc {
      display: none
    }
    #detail {
      border: 1px solid #c7c6c6;
      width: 30px;
      height: 30px;
      text-align: center;
      border-radius: 10px;
      background: rgb(238,174,202);
      background: radial-gradient(circle, rgba(238,174,202,1) 0%, rgba(238,238,238,1) 100%);
      color: #000;
      font-weight: bold;
      position: relative;
      left: -170px;
      top: -40px;
      opacity: 0.7;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="image"></div>
      <button id="detail">โ–ผ</button>
    <div class="desc">
      <h1>์ฐฐ๋ฆฌ ํ‘ธ์Šค(Charlie Puth)</h1>
      <p>2015๋…„ See You Again์ด๋ผ๋Š” ๋ฉ”๊ฐ€ ํžˆํŠธ๊ณก์œผ๋กœ ๋นŒ๋ณด๋“œ์— ๋“ฑ์žฅํ•œ, ์ž‘๊ณก๊ณผ ํ”„๋กœ๋“€์‹ฑ ๋Šฅ๋ ฅ๊นŒ์ง€ ๊ฒธ๋น„ํ•œ ์‹ฑ์–ด์†ก๋ผ์ดํ„ฐ์ด๋‹ค. ๋ฏธ๊ตญ ๋ณด์Šคํ„ด์˜ ๋ช…๋ฌธ ๋ฒ„ํด๋ฆฌ ์Œ์•…๋Œ€ํ•™ ์ „์•ก ์žฅํ•™์ƒ์ด๋‹ค. ๋ณธ๋ž˜ 2009๋…„ 9์›”๋ถ€ํ„ฐ ์œ ํŠœ๋ฒ„ ์…ฐ์ธ ๋„์Šจ์˜ ํƒ€์ดํ‹€๊ณก์„ ์ž‘๊ณกํ•˜๊ฑฐ๋‚˜, ๋ณธ์ธ์˜ ์œ ํŠœ๋ธŒ ํŽ˜์ด์ง€์— ์ปค๋ฒ„ ๊ณก ๋˜๋Š” ์˜ค๋ฆฌ์ง€๋„ ๊ณก์„ ์˜ฌ๋ฆฌ๋Š” ๋“ฑ ๋งˆ์ด๋„ˆํ•œ ์œ ํŠœ๋ฒ„์˜€๋‹ค. ํ˜„์žฌ ์œ ํŠœ๋ธŒ ๊ณต์‹ ๊ณ„์ •์ด ๋ฐ๋ท”ํ•˜๊ธฐ ์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•ด ์˜ค๋˜ ๊ณ„์ •[5]์ธ๋ฐ, ๊ฐ€์ˆ˜๋กœ ๋ฐ๋ท”๋ฅผ ํ•˜๋ฉด์„œ ์˜ˆ์ „์— ์˜ฌ๋ฆฐ ์ปค๋ฒ„ ๋ฐ ์˜ค๋ฆฌ์ง€๋„ ๊ณก ์˜์ƒ๋“ค ์ค‘ ๋‘ ๊ฐœ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ณธ์ธ ๊ณ„์ •์—์„œ ๋ณผ ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค. ์•„๋งˆ ๋น„๊ณต๊ฐœ๋กœ ์ „ํ™˜์‹œํ‚จ ๋“ฏํ•˜๋‹ค. ๋‚จ์•„์žˆ๋Š” ๋‘ ์˜์ƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ Sia์˜ Chandelier ์ปค๋ฒ„ ๊ณก ์˜์ƒ์œผ๋กœ, ํ•˜์–€ ๋ฏผ์†Œ๋งค๋ฅผ ์ž…๊ณ  ํ‰์˜จํ•˜๊ฒŒ ์ƒค์šฐํŒ… ํ•˜๋Š” ์ฐฐ๋ฆฌ ํ‘ธ์Šค์˜ ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.</p>
    </div>
  </div>

  <script src="./230331_2_3_์‹ค์Šต๋ฌธ์ œ.js"></script>
</body>
</html>
const detailBtn = document.querySelector("#detail");
detailBtn.addEventListener("click", function() {
  const desc = document.querySelector(".desc");
  console.log(desc);
  if(desc.style.display == 'none') {
    desc.style.display = 'block';
  } else desc.style.display = 'none';
});