본문 바로가기
Effect

SearchEffect05

by 코터틀 2022. 9. 30.
반응형

searchEffect05

filter() 메서드를 사용하여 CSS 속성의 중요도가 별점으로 표시 / 분류되도록 만들어봤습니다..


HTML

별점으로 속성을 분류할 버튼 영역(click)과 속성 갯수를 표시할(info)영역, 속성 내용이 들어갈(list)영역으로 나누어줍니다.

<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>전체 속성 갯수 : <span class="num">0</span></div>
        </div>

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

JAVASCRIPT

HTML -> search__list에 출력해줄 css 속성을 변수 cssProperty에 저장합니다.
간단하게 전체 속성 갯수를 표시할 script를 작성하고, updateList 함수를 통해 search__list에 css 속성을 출력시킵니다.
별점 버튼에 click 이벤트를 부여하여 별 수에 따라 css 속성이 출력되도록 실행해주면 끝입니다.
(dataset을 사용하여 HTML의 data-star, num 속성값을 가져와 target, target2에 저장)
(cssProperty의 data중에 star 속성값을 target, target2와 비교하여 filterList 변수에 저장)

const cssProperty = [
    { star: 5, name: "accent-color", desc: "특정 요소에 색상을 지정할 때 사용됩니다." },
    { star: 5, name: "align-content", desc: "콘텐츠 아이템의 상하관계 정렬 상태를 설정합니다." },
    { star: 5, name: "align-items", desc: "콘텐츠 아이템의 내부 상하관계 정렬 상태를 설정합니다." },
    { star: 5, name: "align-self", desc: "개별적인 콘텐츠 아이템의 정렬 상태를 설정합니다." },
    { star: 5, name: "all", desc: "요소의 속성을 초기화 또는 상속을 설정합니다." },
    ...
];

const searchList = document.querySelector(".search__list ul");
const searchClick = document.querySelectorAll(".search__click ul li");
const starA = document.querySelectorAll(".search__click ul li a");
const searchInfo = document.querySelector(".search__info .num");

searchInfo.textContent = cssProperty.length;

let count = 0;

// 출력하기
function updateList(list) {
    listCSS = "";
    for (const data of list) {
        listCSS += `<li>${data.name} : ${data.desc}<em>${starA[data.star].innerText}</em></li>`;
        count++;
    }
    searchInfo.textContent = count;
    count = 0;

    searchList.innerHTML = listCSS;
}
updateList(cssProperty);

// 클릭하기
searchClick.forEach((star) => {
    star.addEventListener("click", (el) => {
        const target = star.dataset.star;
        const target2 = star.dataset.num;
        // console.log(target2)
        const filterList = cssProperty.filter((data) => data.star == target || data.star >= target2);
        // console.log(filterList2);

        updateList(filterList);
    });
});
반응형

'Effect' 카테고리의 다른 글

sliderEffect05  (0) 2022.10.18
parallax Effect07  (6) 2022.10.06
parallax Effect06  (0) 2022.09.30
mouseEffect06  (0) 2022.09.30
mouseEffect05  (11) 2022.09.28

댓글


광고 준비중입니다.