๐Ÿคณ๐Ÿป ์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก ์ฝ”๋”ฉ

ํ˜œ๋ฆฐยท2022๋…„ 8์›” 26์ผ
5

Project

๋ชฉ๋ก ๋ณด๊ธฐ
4/8
post-thumbnail

๐Ÿฆ ์†Œ๊ฐœ


์ด๋ฒˆ์ฃผ ์›”์š”์ผ๋ถ€ํ„ฐ ๋ถ™๋“ค๊ณ  ์žˆ๋˜ ์ธ์Šคํƒ€๊ทธ๋žจ ํด๋ก  ํŽ˜์ด์ง€๋ฅผ ๋งˆ๋ฌด๋ฆฌํ–ˆ์–ด์š”-! ์ง์ง์ง๐Ÿฅณ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์™€ ๋ฉ”์ธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ํฌ์ŠคํŒ…์œผ๋กœ ๋‚จ๊ฒจ๋‘๋ ค๊ณ ํ•ด์š”. ๊ทธ๋Ÿผ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๋ณด์‹œ์ฃ !๐Ÿ’๐Ÿปโ€โ™€๏ธ

๐Ÿ“† ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„
22/08/22(์›”) ~ 22/08/26(๊ธˆ)

๐Ÿ”จ ๊ธฐ์ˆ 
HTML/CSS JavaScript

โœจ ๊ตฌํ˜„ ๊ธฐ๋Šฅ
1. ID, PW ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”
2. ๋Œ“๊ธ€ ์ถ”๊ฐ€/๋Œ“๊ธ€ ์ข‹์•„์š”/์‚ญ์ œ
3. ID ๊ฒ€์ƒ‰
4. ๋ชจ๋‹ฌ์ฐฝ
5. ๋ฐ˜์‘ํ˜•



๐Ÿ” ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€


ID, PW ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”

๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋˜์—ˆ์„ ๋•Œ์™€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ๋ฅผ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•ด ์‚ฌ์šฉํ•ด์คฌ์–ด์š”. ์ž…๋ ฅ์ฐฝ value์˜ ๊ธธ์ด๊ฐ€ 0์ด์ƒ์ผ ๋•Œ๋Š” activateButton์œผ๋กœ ๋ฒ„ํŠผ์„ ํ™œ์„ฑํ™”์‹œ์ผฐ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์„ ๋•Œ๋Š” disabledButton์œผ๋กœ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”์‹œ์ผœ์ฃผ์—ˆ์–ด์š”.

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ID๋Š” @๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š์•˜์„ ๋•Œ IDํ™•์ธ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , PW๋Š” 5๊ธ€์ž ์ด์ƒ์ด ์•„๋‹ˆ๋ฉด PWํ™•์ธ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์—ฌ์ค˜์š”. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์—ญ์‹œ ์•„๋ž˜์™€ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ต๋‹ˆ๋‹ค!

JavaScript

// ๋ฒ„ํŠผ ํ™œ์„ฑํ™”
const activateButton = function () {
  $btnLogin.style.backgroundColor = "rgb(0, 149, 246, 1)";
  $btnLogin.disabled = false;
  $btnLogin.classList.add("btn-hoverEffect");
};

// ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™”
const disabledButton = function () {
  $btnLogin.style.backgroundColor = "rgb(0, 149, 246, 0.3)";
  $btnLogin.disabled = true;
  $btnLogin.classList.remove("btn-hoverEffect");
};

// ํ•œ๊ธ€์ž๋ผ๋„ ์น˜๋ฉด ๋ฒ„ํŠผ ํ™œ์„ฑํ™”์‹œํ‚ค๊ธฐ
const checkLength = function () {
  if ($inputId.value.length > 0 && $inputPw.value.length > 0) {
    activateButton();
  } else {
    disabledButton();
  }
};

// input์— keyup ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ
$inputId.addEventListener("keyup", checkLength);
$inputPw.addEventListener("keyup", checkLength);



๐Ÿ‘‘ ๋ฉ”์ธ ํŽ˜์ด์ง€


1. ๋Œ“๊ธ€ ์ถ”๊ฐ€

์‹ค์ œ ์ธ์Šคํƒ€๊ทธ๋žจ์˜ ๋Œ“๊ธ€์ฐฝ์ฒ˜๋Ÿผ ๋Œ“๊ธ€์ฐฝ์— ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•  ๋•Œ, ํ•œ ๊ธ€์ž ์ด์ƒ ์ž…๋ ฅํ•ด์•ผ๋งŒ [๊ฒŒ์‹œ] ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์–ด์š”. ๋ฒ„ํŠผ์˜ ํ™œ์„ฑํ™”, ๋น„ํ™œ์„ฑํ™”๋Š” CSS ํด๋ž˜์Šค๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ๊ฒƒ์œผ๋กœ ์กฐ์ •ํ•ด์ฃผ์—ˆ์–ด์š”. ๊ทธ๋ฆฌ๊ณ  [๊ฒŒ์‹œ] ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ๋ฟ๋งŒ์•„๋‹ˆ๋ผ [Enter]๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ๋„ ๋Œ“๊ธ€์ด ํ”ผ๋“œ์— ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

[Enter]๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ๋„ ๋Œ“๊ธ€์ด ์ž‘์„ฑ๋˜๊ธฐ ์œ„ํ•ด์„œ ๋˜ addEventListener๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜ ๊ณ ๋ฏผ์ด์—ˆ๋Š”๋ฐ, <form> ์•ˆ์— <input>๊ณผ <button>์„ ๋„ฃ์–ด์คฌ์—ˆ๊ธฐ์— ์“ธ๋ฐ์—†๋Š” ๊ณ ๋ฏผ์ด์—ˆ์Œ์„ ์•Œ๊ฒŒ๋์–ด์š”! <form> ์•ˆ์— <input>๋ฐ•์Šค๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ, submit๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ submit๋˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ ๐Ÿ˜Ž


(1) ๋Œ“๊ธ€ ์ถ”๊ฐ€

๋Œ“๊ธ€์€ ์œ„์˜ ๋ชจ์Šต์ฒ˜๋Ÿผ, ๋Œ“๊ธ€์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์ƒ์œ„ ๋ฐ•์Šค์— ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋Œ“๊ธ€ ๋ฐ•์Šค๊ฐ€ ์ฐจ๋ก€๋กœ ๋‹ด๊ธฐ๊ฒŒ ํ–ˆ์–ด์š”. ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋Œ“๊ธ€ ๋ฐ•์Šค์—๋Š” ๋Œ“๊ธ€๊ณผ ์ข‹์•„์š”, ๊ทธ๋ฆฌ๊ณ  ์‚ญ์ œ ์•„์ด์ฝ˜ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ด๊ธฐ๊ฒŒํ–ˆ๊ตฌ์š”.

JavaScript

const leaveComment = function (e) {
  // ์ƒˆ๋กœ๊ณ ์นจ ๋ฐฉ์ง€
  e.preventDefault();
  // ํƒœ๊ทธ ์ƒ์„ฑ
  const comment = document.createElement("p");
  const wrapComment = document.createElement("div");
  const likeIcon = document.createElement("img");
  const deleteIcon = document.createElement("img");
  // ๊ฐ’ ํ• ๋‹น
  comment.textContent = $inputChat.value;
  likeIcon.src = "./src/icon/heart.png";
  deleteIcon.src = "./src/icon/delete.png";
  // ํด๋ž˜์Šค ์ถ”๊ฐ€
  comment.classList.add("text-comment");
  likeIcon.classList.add("img-heart-comment");
  deleteIcon.classList.add("img-delete-comment");
  // ๋ถ€๋ชจ์š”์†Œ์— ๋„ฃ๊ธฐ
  wrapComment.appendChild(comment);
  wrapComment.appendChild(likeIcon);
  wrapComment.appendChild(deleteIcon);
  $commentBox.appendChild(wrapComment);
  // ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋ฉด ๋Œ“๊ธ€์ฐฝ ๋‹ค์‹œ ๋น„์›Œ์ฃผ๊ธฐ
  $inputChat.value = "";
};

๐Ÿ–๐Ÿป ์ž ๊น! ์ฝ”๋“œ ์„ค๋ช…

  • e.preventDefault()
    : ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์˜ ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ง‰์•„์ค˜์š”.

(2) ๋ฒ„ํŠผ ํ™œ์„ฑํ™”

๋Œ“๊ธ€์ฐฝ์— ๋Œ“๊ธ€์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ๋งŒ [๊ฒŒ์‹œ]๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋ผ์š”.

JavaScript

$inputChat.addEventListener("keyup", () => {
  if ($inputChat.value.length > 0) {
    $btnChat.classList.add("btn-chat-effect");
  } else {
    $btnChat.classList.remove("btn-chat-effect");
});

๐Ÿ–๐Ÿป ์ž ๊น! ์ฝ”๋“œ ์„ค๋ช…

  • ๋จผ์ € ๋ถˆํˆฌ๋ช…ํ•œ [๊ฒŒ์‹œ]๋ฒ„ํŠผ์„ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ์–ด์š”.
  • ๊ทธ๋ฆฌ๊ณ  [๊ฒŒ์‹œ]๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™”๋์„ ๋•Œ์˜ CSS ํด๋ž˜์Šค(btn-chat-effect)๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ต๋‹ˆ๋‹ค.
  • ๋Œ“๊ธ€์ฐฝ์— ํ•œ ๊ธ€์ž๋ผ๋„ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด CSS ํด๋ž˜์Šค(btn-chat-effect)๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , ๋Œ“๊ธ€์ฐฝ์— ํ•œ ๊ธ€์ž๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•ด๋‹น CSS ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ์—ˆ์–ด์š”.

(3) [Enter] ๋ˆŒ๋ €์„ ๋•Œ๋„ ๋Œ“๊ธ€์ถ”๊ฐ€

[๊ฒŒ์‹œ]๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, [Enter]๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ๋„ ๋Œ“๊ธ€์ด ์ถ”๊ฐ€๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฑธ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋‹ฌ์•„์ฃผ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๊ตณ์ด ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์Œ์„ ์•Œ๊ฒŒ๋์–ด์š”!

HTML

<form>
  	<input class="input-chat" type="text" placeholder="๋Œ“๊ธ€ ๋‹ฌ๊ธฐ..."/>
	<button class="btn-chat">๊ฒŒ์‹œ</button>
</form>

๐Ÿ–๐Ÿป ์ž ๊น! ์ฝ”๋“œ ์„ค๋ช…

  • <form> ์•ˆ์— <input>๋ฐ•์Šค๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ, ์•„๋ž˜์˜ ๊ฒŒ์‹œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ submit๋œ๋‹ต๋‹ˆ๋‹ค!



2. ๋Œ“๊ธ€ ์ข‹์•„์š”/ ๋Œ“๊ธ€ ์‚ญ์ œ


๋Œ“๊ธ€์— ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅผ์ˆ˜๋„(โค)์žˆ๊ณ , ์ข‹์•„์š”๋ฅผ ์—†์•จ์ˆ˜๋„(๐Ÿค) ์žˆ์–ด์š”. ๊ทธ๋ฆฌ๊ณ  ๋Œ“๊ธ€์˜ ์‚ญ์ œ ์—ญ์‹œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ์—ˆ์–ด์š”. ์ฒ˜์Œ์—๋Š” ํด๋ฆญํ•œ ํ•˜ํŠธ๋งŒ ๊ณจ๋ผ ๋ฐ”๊ฟ”์ฃผ๊ณ , ํด๋ฆญํ•œ ๋Œ“๊ธ€๋งŒ ์‚ญ์ œํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ์‰ฝ์ง€ ์•Š์•˜์–ด์š”. ํด๋ฆญํ•œ ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„ ๊ฒƒ์ด๋ฉฐ, ๋งŒ์•ฝ ์ฐพ๋”๋ผ๋„ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ ์š”์†Œ๋งˆ๋‹ค ์–ด๋–ป๊ฒŒ ๋‹ฌ์•„์ฃผ์–ด์•ผํ•˜๋‚˜ ๊ณ ๋ฏผ์ด์—ˆ๋‹ต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ์ด๋ฒคํŠธ ์œ„์ž„์— ๋Œ€ํ•ด ๋ฐฐ์› ์–ด์š”. ๋Œ“๊ธ€ ๋ฐ•์Šค๋“ค์„ ํฌํ•จํ•˜๋Š” ์ „์ฒด ๋ฐ•์Šค์ธ ๊ณตํ†ต์˜ ์กฐ์ƒ ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋‹ฌ์•„์ฃผ์–ด์„œ ํด๋ฆญํ–ˆ์„ ๋•Œ event.target๋กœ ํด๋ฆญํ•œ ์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”. JS ๋กœ์ง์„ ์งค ๋•Œ, ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ฃจ์–ด์ง์„ ์•Œ๊ฒŒ๋ผ์„œ ์ด๋ฒคํŠธ ์œ„์ž„๊ณผ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ ๊ฐ™์€ ๊ฐœ๋…์„ ๋”ฐ๋กœ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹จ ์ƒ๊ฐ์ด ๋“ค์–ด์š”!

JavaScript

const controlImg = function (e) {
  // ๋Œ“๊ธ€ ์ข‹์•„์š” 
  if (e.target.getAttribute("src") == "./src/icon/heart.png") {
    e.target.setAttribute("src", "./src/icon/fullHeart.png");
  } else if (e.target.getAttribute("src") == "./src/icon/fullHeart.png") {
    e.target.setAttribute("src", "./src/icon/heart.png");
  }
  // ๋Œ“๊ธ€ ์‚ญ์ œ
  if (e.target.className === "img-delete-comment") {
    let parent = e.target.parentElement;
    parent.remove();
  }
};
// ๊ณตํ†ต ์กฐ์ƒ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ ๋‹ฌ๊ธฐ
$commentBox.addEventListener("click", controlImg); 

๐Ÿ–๐Ÿป ์ž ๊น! ์ฝ”๋“œ ์„ค๋ช…

  • ์ด๋ฒคํŠธ ์œ„์ž„
    : ์•ž์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ๊ณตํ†ต๋˜๋Š” ์กฐ์ƒ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋‹ฌ์•„์ฃผ์–ด์„œ e.target์œผ๋กœ ์–ด๋–ค ์ž์‹ ์š”์†Œ๋ฅผ ํด๋ฆญํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.

  • getAttribute์™€ setAttribute
    : src๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ด์„œ ํด๋ฆญํ•œ ์š”์†Œ์˜ src๊ฐ€ ๋นˆํ•˜ํŠธ ํŒŒ์ผ(๐Ÿค)์ด๋ฉด ๊ฝ‰์ฐฌ ํ•˜ํŠธ ํŒŒ์ผ(โค)๋กœ ๋ฐ”๊พธ์–ด์ฃผ๊ณ , ํด๋ฆญํ•œ ์š”์†Œ์˜ src๊ฐ€ ๊ฝ‰์ฐฌ ํ•˜ํŠธ ํŒŒ์ผ(โค)์ด๋ฉด ๋นˆํ•˜ํŠธ ํŒŒ์ผ(๐Ÿค)๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ์–ด์š”.

  • parent.remove()
    : ๋Œ“๊ธ€์„ ์‚ญ์ œํ•  ๋•Œ๋Š” ํด๋ฆญํ•œ ์š”์†Œ์˜ ์กฐ์ƒ ์š”์†Œ๋ฅผ ์ฐพ์•„ ์‚ญ์ œํ•ด์ฃผ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์–ด์š”.



3. ID ๊ฒ€์ƒ‰


์‚ฌ์šฉ์ž์˜ ID, ์ด๋ฆ„, ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ์ž„์˜๋กœ ๋งŒ๋“ค์–ด ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด ์•ˆ์— ์ €์žฅํ•ด์ฃผ์—ˆ์–ด์š”.

const userData = [
  {
    userId: "apple_01",
    userName: "์ƒˆ์ฝค๋‹ฌ์ฝค",
    userImg: "./src/img/profile/apple.jpg",
  },
  // ์ƒ๋žต
]

๊ทธ๋ฆฌ๊ณ  input์ฐฝ์— ์ž…๋ ฅํ•œ ๊ฐ’๊ณผ ์‚ฌ์šฉ์ž์˜ ID ๋ฐ์ดํ„ฐ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์ฐพ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ์—ˆ์–ด์š”. ์ƒˆ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์„ ๋Œ๋ฉฐ ํ™”๋ฉด์— ๊ทธ๋ ค์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ต๋‹ˆ๋‹ค.

JavaScript

const searchId = function () {
  // ๊ฒ€์ƒ‰ํ•œ ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜๋Š” ID๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋‹ด๊ธฐ
  let result = idData.filter((v, i) => {
    return v.userId.includes($searchBar.value);
  });
  // ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋‹ด๊ธด ID๋งŒ ํ™”๋ฉด์— ๊ทธ๋ ค์ฃผ๊ธฐ
  result.forEach((v, i) => {
    // ํƒœ๊ทธ ์ƒ์„ฑ
    const wrapFiltered = document.createElement("div");
    const wrapText = document.createElement("div");
    const filteredImg = document.createElement("img");
    const filteredId = document.createElement("span");
    const filteredName = document.createElement("span");
    // ํด๋ž˜์Šค ๋ถ€์—ฌ
    filteredImg.classList.add("filteredImg");
    wrapFiltered.classList.add("wrapFiltered");
    filteredId.classList.add("filteredId");
    filteredName.classList.add("filteredName");
    wrapText.classList.add("wrapText");
	// ๊ฐ’ ๋„ฃ๊ธฐ
    filteredImg.src = v.userImg;
    filteredId.innerText = v.userId;
    filteredName.innerText = v.userName;
    // ์ƒ์œ„ ์š”์†Œ์— ์ˆœ์ฐจ์ ์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ
    wrapFiltered.appendChild(filteredImg);
    wrapText.appendChild(filteredId);
    wrapText.appendChild(filteredName);
    wrapFiltered.appendChild(wrapText);
    $filteredBox.appendChild(wrapFiltered);
  });
};



4. ๋ชจ๋‹ฌ์ฐฝ


header์˜ navํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ณด์ด๋Š” ๋ชจ๋‹ฌ์ฐฝ์ธ ๋ฉ”๋‰ด์ƒ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์–ด์š”. ๋ชจ๋‹ฌ์ฐฝ์ด ๋ณด์˜€์„ ๋•Œ๋Š” ์–ด๋Š ๋ถ€๋ถ„์„ ํด๋ฆญํ•˜๋“  ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๊ฒŒ ํ•ด์ฃผ์—ˆ์–ด์š”.

JavaScript

const controlMenu = function (e) {
  if (e.target.className === "img-navProfile") {
    if ($wrapMenu.style.display === "none") {
      $wrapMenu.style.display = "inline-block";
    } else {
      $wrapMenu.style.display = "none";
    }
  } else {
    $wrapMenu.style.display = "none";
  }
};

$body.addEventListener("click", controlMenu);

๐Ÿ–๐Ÿป ์ž ๊น! ์ฝ”๋“œ ์„ค๋ช…

  • ์ฒซ๋ฒˆ์งธ ์กฐ๊ฑด
    : header์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ์™€ ํด๋ฆญํ•˜์ง€ ์•Š์•˜์„ ๋•Œ๋กœ ๋‚˜๋ˆ„์–ด ๋ฉ”๋‰ด ๋ชจ๋‹ฌ์˜ display๋ฅผ ์กฐ์ •ํ•ด์ฃผ์—ˆ์–ด์š”.

  • ๋‘๋ฒˆ์งธ ์กฐ๊ฑด
    : ๋ฉ”๋‰ด ๋ชจ๋‹ฌ์ด ๋ณด์ด๋Š” ์ƒํƒœ์—์„œ header์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ํด๋ฆญํ•˜๋ฉด ๋ฉ”๋‰ด ๋ชจ๋‹ฌ์ด ๋‹ซํžˆ๊ฒŒ๋” ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜์œ„ ์กฐ๊ฑด์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ต๋‹ˆ๋‹ค.



5. ๋ฐ˜์‘ํ˜•

๋ฏธ๋””์–ด์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜์‘ํ˜•์›น์œผ๋กœ ๋งŒ๋“ค์—ˆ์–ด์š”. ์ตœ๋Œ€ํ•œ ์ธ์Šคํƒ€๊ทธ๋žจ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋งŒ๋“œ๋ ค๊ณ ํ–ˆ์–ด์š”. ํ™”๋ฉด์ด ์ค„์–ด๋“ฆ์— ๋”ฐ๋ผ header๋ถ€๋ถ„์˜ ๋ณ€ํ™”๊ฐ€ ์ปธ์–ด์š”. ์–ด๋Š ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๋กœ๊ณ ์™€ nav์•„์ด์ฝ˜๋“ค์˜ ์œ„์น˜๋Š” ๊ณ ์ •๋˜๊ณ , ๊ฒ€์ƒ‰์ฐฝ์˜ ํฌ๊ธฐ๋Š” ์ค„์–ด๋“ค๋”๋ผ๊ตฌ์š”. ๊ทธ๋ž˜์„œ ์ €๋Š” ํ™”๋ฉด์˜ ํฌ๊ธฐ๋ฅผ 3์ง€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์กฐ์ •ํ•ด์ฃผ์—ˆ์–ด์š”.

/* ํ™”๋ฉดํฌ๊ธฐ๊ฐ€ 1000px๋ณด๋‹ค ์ž‘์„ ๋•Œ */
@media (max-width: 1000px) {
  .box-aside {
    display: none;
  }
  header h1 {
    position: absolute;
    top: 15px;
    left: 25px;
  }
  .bar-search {
    left: 110px;
  }
}
/* ํ™”๋ฉดํฌ๊ธฐ๊ฐ€ 800px๋ณด๋‹ค ์ž‘์„ ๋•Œ */
@media (max-width: 800px) {
  .bar-search input {
    width: 200px;
  }
}
/* ํ™”๋ฉดํฌ๊ธฐ๊ฐ€ 760px๋ณด๋‹ค ์ž‘์„ ๋•Œ */
@media (max-width: 760px) {
  .bar-search {
    display: none;
  }
  .list-nav {
    position: absolute;
    top: 15px;
    right: 25px;
  }
  header {
    height: 65px;
  }
}

๐Ÿ–๐Ÿป ์ž ๊น! ์ฝ”๋“œ ์„ค๋ช…

  • ํ™”๋ฉดํฌ๊ธฐ๊ฐ€ 1000px๋ณด๋‹ค ์ž‘์„ ๋•Œ
    : ๋ฉ”์ธ ํ™”๋ฉด ์˜ค๋ฅธํŽธ์˜ 'ํšŒ์›๋‹˜์„ ์œ„ํ•œ ์ถ”์ฒœ'๋ถ€๋ถ„์„ display : noneํ•ด์คฌ์–ด์š”.
    : ๋ฉ”์ธ๋กœ๊ณ ์˜ ์œ„์น˜๋„ ์™ผ์ชฝ์— ๊ณ ์ •์‹œ์ผฐ์–ด์š”.

  • ํ™”๋ฉดํฌ๊ธฐ๊ฐ€ 800px๋ณด๋‹ค ์ž‘์„ ๋•Œ
    : header์˜ ๊ฒ€์ƒ‰์ฐฝ ํฌ๊ธฐ๋ฅผ ์ค„์˜€์–ด์š”.

  • ํ™”๋ฉดํฌ๊ธฐ๊ฐ€ 760px๋ณด๋‹ค ์ž‘์„ ๋•Œ
    : ๊ฒ€์ƒ‰์ฐฝ์„ ์—†์• ๊ณ  header์˜ค๋ฅธ์ชฝ์˜ nav๋ถ€๋ถ„์˜ ์œ„์น˜๋ฅผ ๊ณ ์ •์‹œ์ผฐ์–ด์š”.



๐Ÿ”— ๋งํฌ




๐Ÿ’• ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ


JavaScript๋กœ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋‹จ๊ธฐ๊ฐ„์— ์Šค์Šค๋กœ ๊ตฌํ˜„ํ•ด๋‚ธ๊ฑด ์ฒ˜์Œ์ด์—์š”! ๊ฐ•์˜๋ฅผ ๋ณด๋ฉฐ ๋”ฐ๋ผํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ˜ผ์ž ๋จธ๋ฆฌ๋ฅผ ์‹ธ๋งค๋ฉฐ ๊ตฌํ˜„ํ•ด๋ƒˆ๋‹ค๋Š”๊ฒŒ ์ •๋ง ๋ฟŒ๋“ฏํ–ˆ์–ด์š”๐Ÿ˜Š ํ•˜์ง€๋งŒ ์ œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฐ€ ๋ด๋„ ๊ต‰์žฅํžˆ ์ง€์ €๋ถ„ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์š”. ํ•จ์ˆ˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ํ‹ˆํ‹ˆ์ด ๋ฆฌํŒฉํ† ๋งํ•ด๋‚˜๊ฐˆ ๊ณ„ํš์ž…๋‹ˆ๋‹ค๐Ÿ‘๐Ÿป ๋ณ€์ˆ˜๋ช…๋„ ์ข€ ๋” ์ง๊ด€์ ์ด๊ณ  ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ๋ฐ”๊พธ์–ด์ฃผ๊ณ  ์‹ถ์–ด์š”. ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ๋ผ, ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿค”

profile
FE Developer

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

comment-user-thumbnail
2023๋…„ 7์›” 14์ผ

์•ˆ๋…•ํ•˜์„ธ์š”.
์ œ๊ฐ€ ๊ตญ๋น„ ํ”Œ์ ์œผ๋กœ ์ธ์Šคํƒ€๊ทธ๋žจ ์„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์žˆ๋Š”๋ฐ
ํ”„๋ก ํŠธ๊ฐ€ ๋งŽ์ด ์–ด๋ ต๋”๋ผ๊ตฌ์š” ใ…  ๋ช‡๊ฐ€์ง€ ์งˆ๋ฌธ ๊ดœ์ฐฎ์„๊นŒ์š”!

1๊ฐœ์˜ ๋‹ต๊ธ€