λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Javascript Effect

μžλ°”μŠ€ν¬λ¦½νŠΈ 검색 효과 : find()

by μ½”νŒŒμΉ΄ 2022. 9. 28.
728x90

μžλ°”μŠ€ν¬λ¦½νŠΈ : 검색 효과 : find()

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ‹€μ–‘ν•œ νš¨κ³Όλ“€ 쀑, ν•΄λ‹Ήν•˜λŠ” λ¬Έμžμ—΄μ„ 찾을 수 μžˆλŠ” 검색 νš¨κ³Όμž…λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” find() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 속성을 κ²€μƒ‰ν•˜κ³ , κ²€μƒ‰ν•˜λ©΄ ν•΄λ‹Ήν•˜λŠ” μ„€λͺ…이 λ‚˜νƒ€λ‚˜λ„λ‘ μž‘μ—…ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.


1. 속성 좜λ ₯ν•˜κΈ°

const cssProperty = [
    { name: "accent-color", desc: "νŠΉμ • μš”μ†Œμ— 색상을 지정할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€." },
    { name: "align-content", desc: "μ½˜ν…μΈ  μ•„μ΄ν…œμ˜ μƒν•˜κ΄€κ³„ μ •λ ¬ μƒνƒœλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "align-items", desc: "μ½˜ν…μΈ  μ•„μ΄ν…œμ˜ λ‚΄λΆ€ μƒν•˜κ΄€κ³„ μ •λ ¬ μƒνƒœλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "align-self", desc: "κ°œλ³„μ μΈ μ½˜ν…μΈ  μ•„μ΄ν…œμ˜ μ •λ ¬ μƒνƒœλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "all", desc: "μš”μ†Œμ˜ 속성을 μ΄ˆκΈ°ν™” λ˜λŠ” 상속을 μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation", desc: "μ• λ‹ˆλ©”μ΄μ…˜κ³Ό κ΄€λ ¨λœ 속성을 μΌκ΄„μ μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation-delay", desc: "μ• λ‹ˆλ©”μ΄μ…˜ 지연 μ‹œκ°„μ„ μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation-direction", desc: "μ• λ‹ˆλ©”μ΄μ…˜ μ›€μ§μž„ λ°©ν–₯을 μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation-duration", desc: "μ• λ‹ˆλ©”μ΄μ…˜ μ›€μ§μž„ μ‹œκ°„μ„ μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation-fill-mode", desc: "μ• λ‹ˆλ©”μ΄μ…˜μ΄ λλ‚œ ν›„μ˜ μƒνƒœλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation-iteration-count", desc: "μ• λ‹ˆλ©”μ΄μ…˜μ˜ 반볡 횟수λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation-name", desc: "μ• λ‹ˆλ©”μ΄μ…˜ keyframe 이름을 μ„€μ •ν•©λ‹ˆλ‹€." },
    { name: "animation-play-state", desc: "μ• λ‹ˆλ©”μ΄μ…˜ μ§„ν–‰μƒνƒœλ₯Ό μ„€μ • ν•©λ‹ˆλ‹€." },
    { name: "animation-timeline", desc: "x" },
    { name: "animation-timing-function", desc: "μ• λ‹ˆλ©”μ΄μ…˜ μ›€μ§μž„μ˜ 속도λ₯Ό μ„€μ • ν•©λ‹ˆλ‹€." }
    // μƒλž΅
];

μ΄λ²ˆμ—λŠ” μœ„μ™€ 같이 λ°°μ—΄κ³Ό 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ 속성을 슀크립트둜 μž‘μ„±ν•΄ μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

const searchList = document.querySelector(".search__list");
const searchNum = document.querySelector(".search__info .num"); // 속성 갯수 μž…λ ₯ μƒμž
                        
cssProperty.map((element, index) => {
    searchList.innerHTML += `<span>${element.name}</span>`;
    searchNum.innerHTML = index + 1;
});

μž‘μ„±ν•œ 속성듀을 HTML μ•ˆμ— μ‚½μž…ν•΄ μ€λ‹ˆλ‹€. 전체 속성 μˆ˜λ„ λ³΄λ„ˆμŠ€λ‘œ 좜λ ₯ν•΄ μ€λ‹ˆλ‹€.

2. keyup 이벀트 λ§Œλ“€κΈ°

const searchBox = document.querySelector(".search__box input"); // 검색창
const searchDesc = document.querySelector(".search__desc"); // 속성 μ„€λͺ…

searchBox.addEventListener("keyup", () => {
    let searchWord = searchBox.value;
    findProperty(searchWord);
});

검색창에 ν‚€μ›Œλ“œλ₯Ό μž…λ ₯ν–ˆμ„ λ•Œ, ν‚€μ›Œλ“œμ™€ μΌμΉ˜ν•˜λŠ” μ†μ„±μ˜ μ„€λͺ…이 λ‚˜νƒ€λ‚˜λ„λ‘ μž‘μ—…ν•΄ λ΄…μ‹œλ‹€.
λ¨Όμ €, searchBox에 μ–΄λ– ν•œ 값이 μž…λ ₯λ˜μ—ˆλŠ”μ§€ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€. valueλŠ” κ·Έ 값을 뢈러올 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
valueλ₯Ό λΆˆλŸ¬μ™”λ‹€λ©΄, κ·Έ 값이 속성λͺ…κ³Ό μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜κ³ , μΌμΉ˜ν•œλ‹€λ©΄ μ„€λͺ…을 λΆˆλŸ¬μ™€μ•Ό ν•©λ‹ˆλ‹€. κ·Έ 과정은 findPropertyλΌλŠ” λ§€κ°œλ³€μˆ˜ ν•¨μˆ˜ μ•ˆμ—μ„œ μž‘μ—…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

function findProperty(searchData) {
    const targetData = cssProperty.find((data) => data.name === searchData);

    if (targetData == null || targetData == undefined) {
        searchDesc.textContent = "ν•΄λ‹Ή 속성은 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μ‹œ 검색해 μ£Όμ„Έμš”.";
        return; // 'μ’…λ£Œ' 의미의 return
    }

    searchDesc.textContent = targetData.desc;
}

find()λŠ” λ°°μ—΄ μš”μ†Œλ₯Ό κ²€μƒ‰ν•˜κ³ , ν•΄λ‹Ήν•˜λŠ” μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.
즉, λ‘λ²ˆμ§Έ 라인의 μŠ€ν¬λ¦½νŠΈλŠ” cssProperty λ°°μ—΄ λ‚΄μ˜ 각각의 κ°μ²΄μ—μ„œ name 값을 μ°Ύκ³ , 그것을 searchData와 λΉ„κ΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μΌμΉ˜ν•˜λŠ” 값이 μ—†μœΌλ©΄ κ²°κ³Ό μ—†μŒ μ•Œλ¦Όμ„ 좜λ ₯ν•˜κ³ , 값이 있으면 cssProperty λ°°μ—΄ λ‚΄μ—μ„œ ν•΄λ‹Ήν•˜λŠ” desc 값을 좜λ ₯ν•©λ‹ˆλ‹€.
참고둜, μ—¬κΈ°μ—μ„œ return은 μ’…λ£Œμ˜ 의미둜 μ‚¬μš©λ©λ‹ˆλ‹€.

3. click 이벀트 λ§Œλ“€κΈ°

const searchcss = document.querySelectorAll(".search__list span"); // 속성 λͺ©λ‘
searchcss.forEach((e, i) => {
    e.addEventListener("click", () => {
        searchDesc.textContent = cssProperty[i].desc;
    });
});

λ³΄λ„ˆμŠ€λ‘œ, 속성을 ν΄λ¦­ν–ˆμ„ λ•Œμ—λ„ ν•΄λ‹Ήν•˜λŠ” μ„€λͺ…이 λ‚˜νƒ€λ‚˜λ„λ‘ μž‘μ—…ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. 각각의 속성 λͺ©λ‘μ— λŒ€ν•œ μ„ νƒμžλ₯Ό λ§Œλ“€κ³ , click 이벀트λ₯Ό λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€. cssPropertyλŠ” λ°°μ—΄μ΄λ―€λ‘œ, ν•΄λ‹Ήν•˜λŠ” 인덱슀의 desc 값을 좜λ ₯ν•˜λ„λ‘ μž‘μ—…ν•΄ μ£Όλ©΄ λ©λ‹ˆλ‹€.


κ²°κ³Ό

728x90

λŒ“κΈ€

κ°μ‚¬ν•©λ‹ˆλ‹€. πŸ¦™

CSS
κ΄‘κ³  쀀비쀑