Dragonball Online Goku Hand
본문 바로가기
Effect(자바스크립트 활용)/Search Effect 서치이펙트

"서치 이펙트" Search 02. includes() 메서드를 활용하여 검색 화면 만들기

by 별의 코비 2022. 8. 17.
728x90

서치이펙트 02

includes()을 이용하여 검색 화면을 만들어 봅시다.


HTML 태그 검색창 만들기!

▶ 카테고리 만들기

카테고리를 만들기 위해 HTML로 먼저 틀을 짜주어야 합니다.

HTML

<header id="header"> 
    <nav>
        <ul>
            <li><a href="searchEffect01.html">1</a>
            <li class="active"><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 -->

list를 이용하여 목차가 있는 구조로 깔끔하게 카테고리를 짤 수 있습니다.
해당 페이지에 class="active"를 넣어주셔야 어느 페이지에 있는지 쉽게 알 수 있습니다.

CSS

/* header */
#header {
    display: flex;
    justify-content: space-between;
}
#header nav {
    margin: 10px;
}
#header nav li {
    position: relative;
    display: inline;
}
#header nav li a {
    width: 30px;
    height: 30px;
    border: 1px solid  var(--htmlColor);
    border-radius: 50%;
    display: inline-block;
    text-align: center;
    line-height: 30px;
    font-family: 'NexonLv1Gothic';
}
#header nav li.active a {
    background-color:  var(--htmlColor);
    color: #fff;
}
#header nav li .sub {
    position: absolute;
    left: 0;
    top: 35px;
    width: 400px;
}
#header nav li .sub li a {
    width: auto;
    background-color: transparent;
    color:  var(--htmlColor);
    border: 0;
    text-align: left;
    line-height: 1.2;
}
#header nav li .sub li.active a {
    text-decoration: underline;
}
완성본 보기
서치이펙트카테고리

▶ 내용 입력

검색창에 치면 나와야 할 내용들을 정리해줍니다.

HTML

<div class="search__wrap">
    <span>includes()을 이용하여 검색하기</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 class="type">플렉스, 애니메이션, 백그라운드, 기타 등등 유형 별로 검색해보세요!</div>
        <div>전체 속성 갯수 : <span class="num">0</span></div>
    </div>
    <div class="search__list">
        <div class="css">
            <ul>
                <li data-name="accent-color" data-type="플렉스"><strong>accent-color</strong> : accent-color</li>
                <li data-name="align-content" data-type="플렉스"><strong>align-content</strong> : align-content 속성은 콘텐츠 아이템의 상하관계 정렬 상태를 설정합니다.</li>
                <li data-name="align-items" data-type="플렉스"><strong>align-items</strong> : align-items 속성은 콘텐츠 아이템의 내부 상하관계 정렬 상태를 설정합니다.</li>
                <li data-name="align-self" data-type="플렉스"><strong>align-self</strong> : align-self 속성은 개별적인 콘텐츠 아이템의 정렬 상태를 설정합니다.</li>
                <li data-name="all" data-type="기타"><strong>all</strong> : all 속성은 요소의 속성을 초기화 또는 상속을 설정합니다.</li>
                <li data-name="animation" data-type="애니메이션"><strong>animation</strong> : animation 속성은 애니메이션과 관련된 속성을 일괄적으로 설정합니다.</li>
                <li data-name="animation-delay" data-type="애니메이션"><strong>animation-delay</strong> : animation-delay 속성은 애니메이션 지연 시간을 설정합니다.</li>
                <li data-name="animation-direction" data-type="애니메이션"><strong>animation-direction</strong> : animation-direction 속성은 애니메이션 움직임 방향을 설정합니다.</li>
                <li data-name="animation-duration" data-type="애니메이션"><strong>animation-duration</strong> : animation-duration 속성은 애니메이션 움직임 시간을 설정합니다.</li>
                <li data-name="animation-fill-mode" data-type="애니메이션"><strong>animation-fill-mode</strong> : animation-iteration-count 속성은 애니메이션 반복 횟수 설정합니다.</li>
            </ul>
        </div>
    </div>
</div>
1. h1을 통해 제목을 써준 후 .search__box를 통해 label로 검색하기를 넣어준 후 input으로 텍스트를 입력할 수 있는 검색창을 만들어 줍니다.
2. search__info로 후에 자바스크립트를 통해 속성 갯수를 넣어 주기 위해 클래스를 num으로 지정해줍니다.
3. div태그에 클래스명을 search__list로 지정해준 후 그 안에 목록을 구성해야합니다.
4. 데이터들을 입력할 때 HTML에서 사용자가 임의로 지정한 속성값으로 활용할 수 있기 때문에 data name을 입력해주어야 나중에 편리합니다.
5. data-type을 정해주어 나중에 데이터타입을 통해 정보를 찾을 수 있게끔 해줍니다.

CSS

/* header */
#header {
    display: flex;
    justify-content: space-between;
}
#header nav {
    margin: 10px;
}
#header nav li {
    position: relative;
    display: inline;
}
#header nav li a {
    width: 30px;
    height: 30px;
    border: 1px solid  var(--htmlColor);
    border-radius: 50%;
    display: inline-block;
    text-align: center;
    line-height: 30px;
    font-family: 'NexonLv1Gothic';
}
#header nav li.active a {
    background-color:  var(--htmlColor);
    color: #fff;
}
#header nav li .sub {
    position: absolute;
    left: 0;
    top: 35px;
    width: 400px;
}
#header nav li .sub li a {
    width: auto;
    background-color: transparent;
    color:  var(--htmlColor);
    border: 0;
    text-align: left;
    line-height: 1.2;
}
#header nav li .sub li.active a {
    text-decoration: underline;
}
완성본 보기
서치이펙트내용입력

▶ 자바스크립트 활용 (공통)

자바스크립트를 활용하여 검색을 했을 때 검색한 결과가 나올 수 있도록 forEach문과 if문을 이용해서 코딩을 해줍니다.
includes() 메서드를 이용해서

<script>
//선택자
const searchBox = document.querySelector(".search__box input");            //검색 영역
const searchList = document.querySelectorAll(".search__list ul li");       //목록 리스트
const searchInfo = document.querySelector(".search__info .num");

//전체 갯수 설정하기 
for(let i=1; i<=searchList.length; i++){
    const searchInfo = document.querySelector(".search__info .num")
    searchInfo.innerHTML = i;
};

//
searchBox.addEventListener("keyup", () => {
    const searchWord = searchBox.value;     //사용자가 입력한 키워드
    searchList.forEach(el => {
        const cssName = el.dataset.name;    //CSS 속성 모든 값 js: dataset.name(데이터 불러오기)
        //console.log(cssName)
        //"all".includes("all")   //true
        if(cssName.includes(searchWord)){   //searchWord값이 포함됐을 때
            el.classList.remove("hide");
        } else {
            el.classList.add("hide");
        }
    })
})
</script>

댓글