λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
EFFECT

[EFFECT] 검색 효과 05 : filter()λ©”μ„œλ“œλ₯Ό 톡해 μ€‘μš”λ„ 순으둜 κ²€μƒ‰ν•˜κΈ°

by _토맀토 2022. 9. 30.
728x90

πŸ” 검색 효과 : filter()λ₯Ό μ΄μš©ν•˜μ—¬ 속성 μ€‘μš”λ„ 순으둜 κ²€μƒ‰ν•˜κΈ°

이번 μ‹œκ°„μ—λŠ” filter 톡해 μ€‘μš”λ„ 순으둜 클릭할 경우 속성이 λ‚˜νƒ€λ‚˜λŠ” μ‹€μŠ΅μ„ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
+ μΆ”κ°€λ‘œ μ€‘μš”λ„(별)이 λͺ‡κ°œ 이상일 경우 ν•΄λ‹Ή 속성이 λ‚˜μ˜€λŠ” μ‹€μŠ΅λ„ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€......... πŸ₯²


#1. HTML / CSS μ„€μ •ν•˜κΈ°

! HTML TIP !
search__clickμ—μ„œ li μš”μ†Œμ—κ²Œ data-데이터λͺ…="데이터 κ°’"을 μ„€μ •ν•©λ‹ˆλ‹€. => μΆ”ν›„ μŠ€ν¬λ¦½νŠΈμ— μ‚¬μš©ν•˜κΈ° μœ„ν•¨! (클릭이벀트, 숫자 μΉ˜ν™˜)

✏️ HTML 슀크립트 보기
<main id="main">
    <div class="search__wrap">
        <span>filter()λ₯Ό μ΄μš©ν•˜μ—¬ 속성 클릭 μ‹œ μ€‘μš”λ„ 순으둜 보여주기</span>
        <h1>CSS 속성 κ²€μƒ‰ν•˜κΈ°</h1>

        <div class="search__click">
            <ul>
                <li data-star="0"><a href="#">β˜†β˜†β˜†β˜†β˜†</a></li>
                <li data-star="1"><a href="#">β˜…β˜†β˜†β˜†β˜†</a></li>
                <li data-star="2"><a href="#">β˜…β˜…β˜†β˜†β˜†</a></li>
                <li data-star="3"><a href="#">β˜…β˜…β˜…β˜†β˜†</a></li>
                <li data-star="4"><a href="#">β˜…β˜…β˜…β˜…β˜†</a></li>
                <li data-star="5"><a href="#">β˜…β˜…β˜…β˜…β˜…</a></li>
            </ul>
            <ul>
                <li data-num="1"><a href="#">1개 이상</a></li>
                <li data-num="2"><a href="#">2개 이상</a></li>
                <li data-num="3"><a href="#">3개 이상</a></li>
                <li data-num="4"><a href="#">4개 이상</a></li>
            </ul>
        </div>

        <div class="search__info">
            <div>CSS 전체 속성 : <span class="num">0</span></div>
            <div>CSS 선택 속성 : <span class="num2">0</span></div>
        </div>

        <div class="search__list">
            <ul class="line"></ul>
        </div>
    </div>
</main>
<!-- //main -->

! CSS TIP !
이전 검색 μ΄νŽ™νŠΈμ™€ μŠ€νƒ€μΌμ΄ λ™μΌν•˜λ©° μƒˆλ‘œμš΄ ꡬ쑰인 search__click의 μŠ€νƒ€μΌμ„ μ„€μ •ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€!

✏️ CSS 슀크립트 보기
.search__click {
    margin-top: 10px;
    margin-bottom: 30px;
}

.search__click li {
    display: inline;
}

.search__click li a {
    display: inline-block;
    border: 1px solid var(--htmlColor);
    border-radius: 50px;
    padding: 10px 20px;
    margin: 5px 0;
}

.search__click li a:hover {
    background-color: var(--htmlColor);
    color: #fff;

#2. JAVASCRIPT : 슀크립트

이번 μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” filter() λ©”μ„œλ“œ, 그리고 λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 슀크립트λ₯Ό μž‘μ—…ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
μžμ„Έν•œ λ‚΄μš©μ€ μ•„λž˜μ˜ 슀크립트 주석과 ν•¨κ»˜ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€!

! JAVASCRIPT TIP !
1. for of : 반볡문 2. λ³€μˆ˜λͺ….filter((element) => element 쑰건식) : λ³€μˆ˜μ—μ„œ ν•΄λ‹Ή 쑰건에 ν•΄λ‹Ήν•˜λŠ” μš”μ†Œλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
3. dataset = data-데이터λͺ…="데이터 κ°’"을 λͺ¨λ‘ λΆˆλŸ¬μ˜€λŠ” 속성!

//01.μ„ νƒμž
//cssProperty : 데이터 객체화 μ‹œν‚€κΈ°
const cssProperty = [
    { star: 1 , name: "accent-color", desc: " μš”μ†Œμ˜ κ°•μ‘° 색상을 μ§€μ •ν•©λ‹ˆλ‹€. " },
    { star: 5 , name: "align-content", desc: " μ½˜ν…μΈ  사이와 μ½˜ν…μΈ  μ£Όμœ„ 빈 곡간을 ν”Œλ ‰μŠ€ λ°•μŠ€'의 ꡐ차좕 λ˜λŠ” κ·Έλ¦¬λ“œμ˜ 블둝 좕을 따라 λ°°μΉ˜ν•˜λŠ” 방식을 κ²°μ •ν•©λ‹ˆλ‹€." },
    { star: 4 , name: "align-items", desc: " κ΅μ°¨μΆ•μ—μ„œ μ•„μ΄ν…œ μ •λ ¬ ν•˜λŠ” μ†μ„±μž…λ‹ˆλ‹€. 주둜 flexμ—μ„œ item듀을 μ •λ ¬ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€." },
    { star: 1 , name: "align-self", desc: " νŠΉμ • item의 정렬을 λ”°λ‘œ ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€." },
    { star: 1 , name: "all", desc: " CSS μ‚¬μš©μž 지정 속성을 μ œμ™Έν•œ λͺ¨λ“  속성을 μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. μ΄ˆκΉƒκ°’, 상속값, μ•„λ‹ˆλ©΄ λ‹€λ₯Έ μŠ€νƒ€μΌμ‹œνŠΈ 좜처의 κ°’λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€." },
    { star: 3 , name: "animation", desc: " μ• λ‹ˆλ©”μ΄μ…˜κ³Ό κ΄€λ ¨λœ 속성을 μΌκ΄„μ λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€." },
    { star: 3 , name: "animation-delay", desc: " μ• λ‹ˆλ©”μ΄μ…˜ 지연 μ‹œκ°„μ„ μ„€μ •ν•©λ‹ˆλ‹€." },
    { star: 3 , name: "animation-direction", desc: " μ• λ‹ˆλ©”μ΄μ…˜ μ›€μ§μž„ λ°©ν–₯을 μ„€μ •ν•©λ‹ˆλ‹€." },
    { star: 3 , name: "animation-duration", desc: " μ• λ‹ˆλ©”μ΄μ…˜ 움직인 μ‹œκ°„μ„ μ„€μ •ν•©λ‹ˆλ‹€." },
    .
    .
    .
    { star: 3 , name: "z-index", desc: " μ—˜λ¦¬λ¨ΌνŠΈμ˜ κ²Ήμ³μ§€λŠ” μˆœμ„œλ₯Ό μ§€μ •ν•œλ‹€." }
];
const searchList = document.querySelector(".search__list ul"); //μ„œμΉ˜λ¦¬μŠ€νŠΈ
const searchClick = document.querySelectorAll(".search__click ul li"); //클릭 μš”μ†Œ
const searchNum = document.querySelector(".search__info .num"); //전체속성
const starNum = document.querySelectorAll(".search__click ul li a") //별

//μ „μ²΄μ†μ„±κ°―μˆ˜ν‘œμ‹œ
searchNum.innerText = cssProperty.length + "개";


//02 좜λ ₯ν•˜κΈ° : 좜λ ₯ν•˜κΈ°λ₯Ό ν•¨μˆ˜ν™” μ‹œν‚€κΈ° : μ΄λ ‡κ²Œ ν•  경우 μž¬ν™œμš©μ΄ κ°€λŠ₯ν•œ μŠ€ν¬λ¦½νŠΈκ°€ λœλ‹€!
//2.λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ•„μ„œ μž‘μ—…
function updateList(cssProperty2){
    listCSS = "";

    //for of문을 μ‚¬μš©ν•˜μ—¬ 반볡.
    //3.받은 λ§€κ°œλ³€μˆ˜ 값을 λ‹€μ‹œ dataλΌλŠ” λ³€μˆ˜μ— μ €μž₯μ‹œν‚¨λ‹€. 즉 data == cssProperty
    for( const data of cssProperty2 ){
        //μ„œμΉ˜λ¦¬μŠ€νŠΈ ulμ•ˆμ— λ“€μ–΄κ°ˆ li리슀트의 ꡬ쑰 μ„€μ •!
        // listCSS += `<li>${data.name}: ${data.desc} <em>${data.star}</em></li>`;

        //숫자 λ³„λ‘œ μΉ˜ν™˜ 방법1
        //λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ ν…μŠ€νŠΈ λ³„μ˜ 데이터값을 λ„£λŠ”λ‹€.
        // listStar = starNum[data.star].innerText;
        // listCSS += `<li>${data.name}: ${data.desc} <em>${listStar}</em></li>`;
        
        // 방법2 : if문을 톡해 리슀트의 ꡬ쑰 쀑 숫자λ₯Ό λ³„λ‘œ μΉ˜ν™˜ν•΄μ£ΌκΈ°.
        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>`;
        }
    }

    //μ„œμΉ˜λ¦¬μŠ€νŠΈμ— μœ„μ˜ ꡬ쑰λ₯Ό innerHTML을 톡해 λ„£μ–΄μ€€λ‹€.(μš”μ†Œλ₯Ό λ„£μ–΄μ•Ό ν•˜λ―€λ‘œ!)
    searchList.innerHTML = listCSS;

}
//1. λ§€κ°œλ³€μˆ˜λ‘œ μœ„μ˜ λ³€μˆ˜κ°’ κ°€μ Έμ˜¨ ν›„ ν•¨μˆ˜μ— μ €μž₯ 
updateList(cssProperty);


//03. ν΄λ¦­ν•˜κΈ°
//searchClick의 μš”μ†Œ λͺ¨λ‘ 선택 ν›„ 이벀트 클릭 μ„€μ •(이벀트 λ¦¬μŠ€λ„ˆλŠ” 닀쀑 μ„ νƒμžκ°€ λΆˆκ°€ν•˜λ―€λ‘œ λ°˜λ³΅λ¬Έμ„ 톡해 닀쀑 섀정이 κ°€λŠ₯!)
searchClick.forEach(element => {
    element.addEventListener("click",()=>{
        //μœ„μ˜ htmlμ—μ„œ searchClick의 li의 data-star 속성을 κ°€μ Έμ˜¨ ν›„ targetλ³€μˆ˜μ— μ €μž₯
        const target = element.dataset.star;
        //마찬 κ°€μ§€λ‘œ μœ„μ˜ data-num 속성을 λͺ¨λ‘ κ°€μ Έμ˜¨ λ’€ target2에 μ €μž₯!
        const target2 = element.dataset.num;

        //μ½œλ°±ν•¨μˆ˜
        //filter와 find의 μ‚¬μš©λ²•μ΄ κ°™λ‹€. λ‹€λ§Œ 쑰건을 μ“Έ 수 μžˆλ‹€λŠ” μ μ—μ„œ λ‹€λ₯΄λ‹€!
        const filterList = cssProperty.filter(data => data.star == target || data.star >= target2);

        //λ§€κ°œλ³€μˆ˜λ‘œ μœ„μ˜ λ³€μˆ˜ 값을 가져와 ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€.
        updateList(filterList);
    });
});

#3. κ²°κ³Ό

728x90

λŒ“κΈ€


Lucky Charms Rainbow
js
html
css