๐Ÿ“– TIL - JavaScript ์‹ค์ „ ํŒ: ์ˆซ์ž ์ฒ˜๋ฆฌ๋ถ€ํ„ฐ ํด๋ž˜์Šค ์„ค๊ณ„๊นŒ์ง€ ๐Ÿ› ๏ธ

์Š˜ยท2025๋…„ 1์›” 14์ผ

๐Ÿ“– TIL

๋ชฉ๋ก ๋ณด๊ธฐ
25/89

๐Ÿ“Œ ํ•™์Šต ๋‚ด์šฉ ์ •๋ฆฌ

1. ์ˆซ์ž ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ

toFixed() vs Math.round()

// Math.round ์‚ฌ์šฉ
Math.round(e.vote_average * 100) / 100

// toFixed() ์‚ฌ์šฉ
const roundedVote = e.vote_average.toFixed(2)

toFixed()์˜ ํŠน์ง•

  • ๋ฐ˜ํ™˜๊ฐ’์ด ๋ฌธ์ž์—ด
  • ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ฐ•์ œ๋กœ ๊ณ ์ • (์˜ˆ: 3 โ†’ "3.00")
  • ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ํ•„์š”์‹œ parseFloat() ์‚ฌ์šฉ
const num = parseFloat(e.vote_average.toFixed(2))

2. DOM ์กฐ์ž‘ ์ตœ์ ํ™”

๋ฌธ์ œ์ƒํ™ฉ: ๋งˆ์šฐ์Šค hover ์‹œ ์•„์ด์ฝ˜ ๋ณ€๊ฒฝ ๋ถˆ์•ˆ์ •

// ๋น„ํšจ์œจ์ ์ธ ์ฝ”๋“œ
$bookmarkIcon.addEventListener("mouseenter", () => {
  $bookmarkIcon.innerHTML = "";
  $bookmarkIcon.innerHTML = `<i class="material-symbols-outlined">bookmark_add</i>`;
});

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 1: setTimeout ํ™œ์šฉ

$bookmarkIcon.addEventListener("mouseenter", () => {
  setTimeout(() => {
    $bookmarkIcon.innerHTML = `<i class="material-symbols-outlined">bookmark_add</i>`;
  }, 0);
});

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 2: classList ํ™œ์šฉ (๋” ํšจ์œจ์ )

$bookmarkIcon.addEventListener("mouseenter", () => {
  const icon = $bookmarkIcon.querySelector('i');
  icon.textContent = "bookmark_add";
  icon.classList.add("bookmark-add-icon");
  icon.classList.remove("bookmark-icon");
});

3. ํด๋ž˜์Šค ์„ค๊ณ„์™€ ๋ชจ๋“ˆํ™”

Loading ํด๋ž˜์Šค ์˜ˆ์‹œ

export class Loading {
  constructor(selector) {
    this.$element = document.querySelector(selector);  // DOM ์š”์†Œ ์ €์žฅ
  }
  
  toggle(show) {
    this.$element.style.display = show ? "block" : "none";
  }
}

ํด๋ž˜์Šค ์„ค๊ณ„ ํฌ์ธํŠธ
1. constructor์˜ ์—ญํ• 

  • ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ์ดˆ๊ธฐ ์„ค์ •
  • DOM ์š”์†Œ ์„ ํƒ ๋“ฑ ๊ธฐ๋ณธ ์„ค์ •
  1. this์˜ ์˜๋ฏธ

    • ํ˜„์žฌ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด
    • this.$element๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๊ณต์œ ๋˜๋Š” ๋ณ€์ˆ˜
  2. ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค ์‚ฌ์šฉ

class MovieList {
  constructor() {
    this.loading = new Loading("#loading");  // constructor์—์„œ ์ดˆ๊ธฐํ™”
  }

  async initialize() {
    this.loading.toggle(true);  // ์ธ์Šคํ„ด์Šค ์žฌ์‚ฌ์šฉ
    // ... 
  }
}

โœจ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ์ 

  1. ์ˆซ์ž ์ฒ˜๋ฆฌ์˜ ์„ธ๋ฐ€ํ•œ ์ œ์–ด

    • toFixed()์™€ Math.round()์˜ ์ฐจ์ด
    • ๋ฐ˜ํ™˜ ํƒ€์ž…์— ๋Œ€ํ•œ ์ดํ•ด
  2. DOM ์กฐ์ž‘ ์ตœ์ ํ™”

    • innerHTML ๋Œ€์‹  classList ํ™œ์šฉ
    • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ Œ๋”๋ง ์•ˆ์ •ํ™”
  3. ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์„ค๊ณ„์˜ ์ด์ 

    • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ
    • ์˜์กด์„ฑ ๊ด€๋ฆฌ ์šฉ์ด
    • ์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ฐœ์„ 

๐Ÿš€ ์ด๋Ÿฐ ์ ์ด ํšจ์œจ์ ์ด์—์š”

  • ์ˆซ์ž ์ฒ˜๋ฆฌ์‹œ ์ƒํ™ฉ์— ๋งž๋Š” ๋ฉ”์„œ๋“œ ์„ ํƒ
  • DOM ์กฐ์ž‘ ์ตœ์†Œํ™”๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ
  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์„ค๊ณ„๋กœ ์ฝ”๋“œ ๊ตฌ์กฐํ™”
profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€