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

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

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

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

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


1. 속성 μž‘μ„±ν•˜κΈ°

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

λ¨Όμ €, 속성듀을 슀크립트둜 μž‘μ„±ν•΄ μ€λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” 별점 star값을 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ€‘μš”λ„λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

2. μ„ νƒμž λ§Œλ“€κΈ°

const searchList = document.querySelector(".search__list ul");
const searchClick = document.querySelectorAll(".search__click ul:nth-child(1) li");
const searchClick2 = document.querySelectorAll(".search__click ul:nth-child(2) li");
let count = 0;

이제 μ„ νƒμžλ₯Ό λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€. 각각 속성듀을 좜λ ₯ν•  ul, 별점 λ¦¬μŠ€νŠΈλ“€, countλŠ” 검색 κ²°κ³Ό 수λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

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

function updateList(list) {
    listCSS = "";
    for (const data of list) {
        if (data.star == 0) {
            listCSS += `<li>${data.name} : ${data.desc} <em>🌚🌚🌚🌚🌚</em></li>`;
        }
        if (data.star == 1) {
            listCSS += `<li>${data.name} : ${data.desc} <em>🌝🌚🌚🌚🌚</em></li>`;
        }
        if (data.star == 2) {
            listCSS += `<li>${data.name} : ${data.desc} <em>🌝🌝🌚🌚🌚</em></li>`;
        }
        if (data.star == 3) {
            listCSS += `<li>${data.name} : ${data.desc} <em>🌝🌝🌝🌚🌚</em></li>`;
        }
        if (data.star == 4) {
            listCSS += `<li>${data.name} : ${data.desc} <em>🌝🌝🌝🌝🌚</em></li>`;
        }
        if (data.star == 5) {
            listCSS += `<li>${data.name} : ${data.desc} <em>🌝🌝🌝🌝🌝</em></li>`;
        }
    }
    searchList.innerHTML = listCSS;
}
updateList(cssProperty);

속성을 좜λ ₯ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€. star값에 따라 별점 이λͺ¨μ§€λ₯Ό μ‚½μž…ν•΄ μ€λ‹ˆλ‹€. 별점 이λͺ¨μ§€κ°€ μ‚½μž…λœ 각각의 λͺ©λ‘λ“€μ€ listCSS μ•ˆμ— ν•˜λ‚˜μ”© μΆ”κ°€λ©λ‹ˆλ‹€. λͺ¨λ“  λͺ©λ‘μ΄ μΆ”κ°€λœ listCSSλŠ” searchList μ•ˆμ— μ‚½μž…λ©λ‹ˆλ‹€.

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

4-1) ν΄λ¦­ν•œ 별점에 ν•΄λ‹Ήν•˜λŠ” μ†μ„±λ§Œ 보여주기

searchClick.forEach((star) => {
    star.addEventListener("click", () => {
        const target = star.dataset.star;

        const filterList = cssProperty.filter((data) => data.star == target);
        count = filterList.length;
        document.querySelector(".num2").innerHTML = count;

        updateList(filterList);
    });
});

λ¨Όμ €, star의 κ°’(0, 1, 2, 3, 4, 5 쑴재)을 가져와야 ν•©λ‹ˆλ‹€. target λ³€μˆ˜ μ•ˆμ— λ„£μ–΄ μ€λ‹ˆλ‹€.
filterListλŠ” data.star의 값이 targetκ³Ό 같은지 ν™•μΈν•˜κ³ , 같은 값을 가진 λ°μ΄ν„°λ§Œ 좜λ ₯ν•΄ μ€λ‹ˆλ‹€. 이 λ•Œ, filterList의 κ°―μˆ˜λŠ” 검색 결과의 μˆ˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
슀크립트λ₯Ό λͺ¨λ‘ μž‘μ„±ν–ˆλ‹€λ©΄, filterList의 데이터λ₯Ό updateList둜 μ „μ†‘ν•©λ‹ˆλ‹€.

4-2) ν΄λ¦­ν•œ 별점 이상에 ν•΄λ‹Ήν•˜λŠ” μ†μ„±λ§Œ 보여주기

searchClick2.forEach((star) => {
    star.addEventListener("click", () => {
        const target = star.dataset.star;

        const filterList = cssProperty.filter((data) => data.star >= target);
        count = filterList.length;
        document.querySelector(".num2").innerHTML = count;

        updateList(filterList);
    });
});

별점 1개 이상, 별점 2개 이상 λ“± ν΄λ¦­ν•œ 별점 갯수 이상에 ν•΄λ‹Ήν•˜λŠ” μ†μ„±λ§Œ 보여쀄 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μœ„μ™€ λ™μΌν•˜μ§€λ§Œ, filter λ©”μ„œλ“œμ—μ„œ μ—°μ‚°μžλ₯Ό >=둜 λ°”κΎΈμ–΄λ§Œ μ£Όλ©΄ λ©λ‹ˆλ‹€.

5. 전체 속성 수 좜λ ₯ν•˜κΈ°

document.querySelector(".num").innerHTML = cssProperty.length;

λ§ˆμ§€λ§‰μœΌλ‘œ, 전체 속성 수λ₯Ό 좜λ ₯ν•΄ μ€λ‹ˆλ‹€.


κ²°κ³Ό

?? μ•„γ…‹γ…‹;;;;; 학원 μ»΄ν“¨ν„°λ‘œλŠ” κ·€μ—¬μ› λ˜ λ‹¬λ‹˜μ΄ 제 λ²Œλ ˆκ°™μ€ LG λ…ΈνŠΈλΆμ—μ„œλŠ” λ˜λ„κ°€μŠ€λ‘œ λ³΄μ΄λ„€μš”... μ—¬λŸ¬λΆ„λ“€μ€ μ–΄λ–»κ²Œ λ³΄μ΄μ‹œλ‚˜μš”...

728x90

λŒ“κΈ€

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

CSS
κ΄‘κ³  쀀비쀑