본문 바로가기
Effect

SearchEfferct02

by 코터틀 2022. 8. 17.
반응형

searchEffect02

includesOf() 문자열 메서드를 사용하여 CSS 속성을 검색할 수 있게 코딩하였습니다.


HTML

전체적인 HTML 구조는 동일하며, search__list(속성 리스트)에 data-type 속성을 추가하여 타입으로도 검색이 가능하도록 하였습니다.

<header id="header">
    <nav>
        <ul>
            <li class="active"><a href="searchEffect01_css.html">1</a></li>
            <li><a href="searchEffect02.html">2</a></li>
            <li><a href="searchEffect03.html">3</a></li>
            <li><a href="searchEffect04.html">4</a></li>
            <li><a href="searchEffect05.html">5</a></li>
            <li><a href="searchEffect06.html">6</a></li>
        </ul>
    </nav>
</header>
<!-- //header -->

<main id="main">
    <div class="search__wrap">
        <span>indexOf()를 이용하여 검색하기</span>
        <h1>CSS 속성 검색하기</h1>
        <div class="search__box">
            <label for="search">검색하기</label>
            <!-- 웹표준 준수(숨김처리) -->
            <input type="text" id="search" placeholder="CSS 속성을 입력해주세요!">
            <!-- 검색창 기본 문구 -->
        </div>
        <div class="search__info">
            <div>전체 속성 갯수<span class="num">0</span></div>
        </div>
        <div class="search__list">
            <div class="html">
                <ul>
                    <li data-name="accent-color" data-type="플렉스"><strong>accent-color</strong> : 특정 요소에 색상을 지정할 때
                    사용됩니다.</li>
                    <li data-name="align-content" data-type="플렉스"><strong>align-content</strong> : 콘텐츠 아이템의 상하관계 정렬
                        상태를 설정합니다.</li>
                    <li data-name="align-items" data-type="플렉스"><strong>align-items</strong> : 콘텐츠 아이템의 내부 상하관계 정렬
                        상태를 설정합니다.</li>
                    <li data-name="align-self" data-type="플렉스"><strong>align-self</strong> : 개별적인 콘텐츠 아이템의 정렬 상태를
                        설정합니다.</li>
                    <li data-name="all" data-type="기타"><strong>all</strong> : 요소의 속성을 초기화 또는 상속을 설정합니다.</li>
                    <li data-name="animation" data-type="애니메이션"><strong>animation</strong> : 애니메이션과 관련된 속성을 일괄적으로
                        설정합니다.</li>
                    <li data-name="animation-delay" data-type="애니메이션"><strong>animation-delay</strong> : 애니메이션 지연
                        시간을 설정합니다.</li>
                    <li data-name="animation-direction" data-type="애니메이션"><strong>animation-direction</strong> :
                        애니메이션 움직임 방향을 설정합니다.
                    </li>
                    <li data-name="animation-duration" data-type="애니메이션"><strong>animation-duration</strong> : 애니메이션
                        움직임 시간을 설정합니다.
                    </li>
                    <li data-name="animation-fill-mode" data-type="애니메이션"><strong>animation-fill-mode</strong> :
                        애니메이션이 끝난 후의 상태를
                        설정합니다.</li>
                    <li data-name="animation-iteration-count" data-type="애니메이션">
                        <strong>animation-iteration-count</strong> : 애니메이션의 반복
                        횟수를 설정합니다.</li>
                    <li data-name="animation-name" data-type="애니메이션"><strong>animation-name</strong> : 애니메이션
                        keyframe 이름을 설정합니다.</li>
                    <li data-name="animation-play-state" data-type="애니메이션"><strong>animation-play-state</strong> :
                        애니메이션 진행상태를 설정합니다.
                    </li>
                    <li data-name="animation-timeline" data-type="애니메이션"><strong>animation-timeline</strong> : </li>
                    <li data-name="animation-timing-function" data-type="애니메이션">
                    <strong>animation-timing-function</strong> : 애니메이션
                        움직임의 속도를 설정합니다.</li>
                    ...
                </ul>
            </div>
        </div>
    </div>
</main>
<!-- //main -->

<footer id="footer">
    <a href="mailto:tjrwns3650@gmail.com">tjrwns3650@gmail.com</a>
</footer>
<!-- //footer -->

JAVASCRIPT

js 코딩은 앞의 01번과 동일하나, indexOf() -> includes()를 사용하여 사용자가 검색한 문자열이 data-name의 특정 요소를 포함하고 있다면 true를 반환하여 클래스 hide를 제거하도록하고, false라면 hide를 추가하여 숨겨지도록 하였습니다.

//선택자
const searchBox = document.querySelector(".search__box input");   //input 박스
const searchList = document.querySelectorAll(".search__list ul li");    //목록 리스트
const searchInfo = document.querySelector(".search__info .num");     //전체 갯수

//속성 갯수 설정하기
searchInfo.textContent = searchList.length;

//검색 영역
searchBox.addEventListener("keyup", () => {
    const searchWord = searchBox.value;     //사용자가 입력한 키워드
    const searchType = searchBox.value;     //사용자가 입력한 타입

    searchList.forEach(el => {
        const cssName = el.dataset.name;        //CSS 속성 모든 값
        const cssType = el.dataset.type;        //CSS 타입 모든 값
        // console.log(cssName);

        if (cssName.includes(searchWord) | cssType.includes(searchType)) {
            el.classList.remove("hide");
        } else {
            el.classList.add("hide");
        }

    });
});
반응형

'Effect' 카테고리의 다른 글

SearchEffect03  (4) 2022.08.22
QuizEffect05  (9) 2022.08.18
SearchEffect01  (5) 2022.08.16
QuizEffect04  (12) 2022.08.08
QuizEffect03  (10) 2022.08.06

댓글


광고 준비중입니다.