๊ฒ์ ์ดํํธ ๋ง๋ค๊ธฐ 04
์ด๋ฒ ์๊ฐ์๋ ๊ทธ ๋์ ๋ฐฐ์ ๋ JavaScript๋ฅผ ์ด์ฉํ์ฌ ๊ฒ์ ์ดํํธ๋ฅผ ๋ง๋ค์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ฒ ํ์ต ๋ด์ฉ์ ์ ํ์ฉํ์ฌ ๊ทธ๋์ ๋ฐฐ์ ๋ CSS ์์ฑ๋ค์ ๊ฒ์์ฐฝ ํ์์ผ๋ก ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก
๋ง๋ค์ด๋ณด๋๋ก ํฉ์๋ค. ๋์ค์ ๋ชจ๋ฅด๋ ๊ฒ ์๊ฒผ์ ๋ ๊ณต๋ถํ๊ธฐ ํธํ๊ฒ ๋ง์ด์ฃ !
์, ๊ทธ๋ผ ์์ํด๋ณผ๊น์?
HTML ์์ค ๋ณด๊ธฐ
๊ฒ์ ์ดํํธ 04์ HTML ์์ค์ ๋ถ์ฐ ์ค๋ช
(์ฃผ์ ์ฒ๋ฆฌ๋จ)์ด๋ค.
CSS ์์ค๋ฅผ ํจ๊ป ๋ณด๊ณ ์ถ๋ค๋ฉด ๋งจ ์๋์ 'CSS ์์ค ๋ณด๊ธฐ' ๋ฒํผ์ ๋๋ฅผ ๊ฒ.
<body>
<header id="header">
<h1>Search</h1>
<nav>
<ul>
<li><a href="searchEffect01.html">01</a></li>
<li><a href="searchEffect02.html">02</a></li>
<li><a href="searchEffect03.html">03</a></li>
<li class="active"><a href="searchEffect04.html">04</a></li>
<li><a href="searchEffect05.html">05</a></li>
<li><a href="searchEffect06.html">06</a></li>
</ul>
</nav>
</header>
<!-- // header -->
<main id="main">
<div class="search__wrap">
<span>find()๋ฅผ ์ด์ฉํ์ฌ ์์ฑ์ ๊ฒ์ํ๋ฉด ์ค๋ช
๋ณด์ฌ์ฃผ๊ธฐ</span>
<h1>CSS ์์ฑ ๊ฒ์ํ๊ธฐ</h1>
<div class="search__box">
<label for="search">๊ฒ์ํ๊ธฐ</label>
<input type="text" id="search" placeholder="CSS ์์ฑ ๋ฐ ์ ํ์ ์
๋ ฅํด์ฃผ์ธ์.">
</div>
<div class="search__desc">
์์ฑ์ ๊ฒ์ํ์๋ฉด ์ค๋ช
์ด ํ์๋ฉ๋๋ค.
</div>
<div class="search__info">
<div>์ ์ฒด ์์ฑ ๊ฐ์ : <span class="num">0</span></div>
</div>
<div class="search__list">
</div>
</div>
</main>
<!-- // main -->
<footer id="footer">
<a href="mailto:kde66034@gmail.com">kde66034@gmail.com</a>
</footer>
<!-- //footer -->
</body>
JavaScript ์์ค ๋ณด๊ธฐ
๊ฒ์ ์ดํํธ 04์ JavaScript ์์ค์ ๋ถ์ฐ ์ค๋ช (์ฃผ์ ์ฒ๋ฆฌ๋จ)์ด๋ค. ์์ cssProperty์ ๊ฒ์๊ฒฐ๊ณผ์ ๋์ธ CSS ์์ฑ ๋ฆฌ์คํธ๋ค์ ๋ชจ๋ ์ ์ฅํ๊ณ ์ด๊ฒ๋ค์ ์ถ๋ ฅํ๊ณ ์์ฑ ํด๋ฆญ ์ ์ค๋ช ์ด ๋์ค๋๋ก ํ๋ ์์ ๊ณผ ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ๊ณผ ์ผ์นํ๋ ์์ฑ name์ desc๋ฅผ ์ถ๋ ฅ์์ผ์ฃผ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ง ๋ค.
// CSS ์์ฑ ๋ฆฌ์คํธ ์ ์ฅ
const cssProperty = [
{ name: "accent-color", desc: "ํน์ ์์์ ์์์ ์ง์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค." },
{ name: "align-content", desc: "์ฝํ
์ธ ์์ดํ
์ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค." },
{ name: "align-items", desc: "์ฝํ
์ธ ์์ดํ
์ ๋ด๋ถ ์ํ๊ด๊ณ ์ ๋ ฌ ์ํ๋ฅผ ์ค์ ํฉ๋๋ค." },
]
const searchList = document.querySelector(".search__list"); // ์์น ๋ฆฌ์คํธ ul
const searchNum = document.querySelector(".search__info .num"); // ์ ์ฒด ๊ฐ์
const searchBox = document.querySelector(".search__box input"); // ๊ฒ์์ฐฝ
const searchDesc = document.querySelector(".search__desc"); // ์ค๋ช
์ฐฝ
// ์ถ๋ ฅํ๊ธฐ
cssProperty.map((element, index) => {
searchNum.innerHTML = cssProperty.length; // CSS ์์ฑ ์ด ๊ฐ์ ์ถ๋ ฅ
// searchNum.innerHTML = index + 1;
searchList.innerHTML += `${element.name}`;
});
// ์์ฑ ํด๋ฆญ ์์
const searchListSpan = searchList.querySelectorAll('span');
searchListSpan.forEach((span) => {
span.addEventListener('click', (e) => {
const seachWord = e.target.textContent;
findProperty(seachWord);
window.scrollTo({left : 0, top : 0, behavior : "smooth"});
});
});
// ์
๋ ฅํ๊ธฐ
searchBox.addEventListener("keyup", () => {
const searchWord = searchBox.value; // ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ์ ์ ์ฅ
// console.log(searchWord);
findProperty(searchWord);
});
// ์์ฑ ์ฐพ๊ธฐ
function findProperty(searchData) {
const targetData = cssProperty.find((data) => data.name === searchData);
if(targetData == null) { // ๋ฐ์ดํฐ๊ฐ null์ผ(์กด์ฌํ์ง ์์) ๊ฒฝ์ฐ
searchDesc.textContent = "ํด๋น ์์ฑ์ ์กด์ฌํ์ง ์์ต๋๋ค. ๋ค์ ๊ฒ์ํด์ฃผ์ธ์!"; // ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์ ์ ํ์ํ ๋ฌธ๊ตฌ
return; // ์ข
๋ฃ์ ์๋ฏธ - F12 ์ฝ์์ฐฝ ์ค๋ฅ๋ฅผ ์์ ์ค
};
searchDesc.textContent = targetData.desc;
};
'Effect > Search Effect' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Search Effect] ๊ฒ์ ์ดํํธ 06 (1) | 2022.10.21 |
---|---|
[Search Effect] ๊ฒ์ ์ดํํธ 05 (4) | 2022.09.29 |
[Search Effect] ๊ฒ์ ์ดํํธ 03 (7) | 2022.08.22 |
[Search Effect] ๊ฒ์ ์ดํํธ 02 (2) | 2022.08.17 |
[Search Effect] ๊ฒ์ ์ดํํธ 01 (8) | 2022.08.16 |
๋๊ธ