본문 바로가기
Effect

SearchEffect01

by 코딩 냠냠 2022. 8. 16.
728x90
반응형

스크립트를 이용한 서치효과 만들기 01

스크립트를 이용하여 HTML 태그를 검색하는 효과를 만들 수 있습니다.

Script

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

searchBox.addEventListener("keyup", () => {
    const searchWord = searchBox.value;         //사용자가 입력한 키워드
        
    searchList.forEach(el => {
        const cssName = el.dataset.name;

        if(cssName.indexOf(searchWord)) {
            el.classList.add("hide");
        } else {
            el.classList.remove("hide");       //indexOf()값이 0(false)되는 값만 hide를 지워줍니다.
        }
    });
});

"문자열".indexOf(검색값)
"문자열".indexOf(검색값, 위치값)

indexOf()를 이용하여 시용자가 입력한 데이터와 search__list의 데이터가 일치시킵니다. 이때, indexOf()의 값이 '0'(false)일때 hide를 지워서 검색 결과만 나오게 만들어 줍니다.

HTML

<div class="search_wrap">
    <span>indexOf()를 이용하여 검색하기</span>
     <h1>HMTL 태그 검색하기</h1>
     <div class="search__box">
        <label for="search">검색하기</label>
        <input type="text" id="search" placeholder="HTML 태그를 입력해주세요!">
     </div>
     <div class="search__list">
        <div class="html">
            <ul>
                <li data-name="a"><strong>a</strong> : a 태그는 다른 페이지 이동을 설정합니다.</li>
                <li data-name="abbr"><strong>abbr</strong> : abbr 태그는 줄임말이나 머리글자를 표현하는데 사용합니다.</li>
                <li data-name="acronym"><strong>acronym</strong> : acronym 태그는 줄임말이나 머리글자를 표현하는데 사용합니다. 지금은 사용하지 않습니다.</li>
                <li data-name="address"><strong>address</strong> : address 태그는 웹페이지의 연락처 정보를 나타냅니다.</li>
                <li data-name="applet"><strong>applet</strong> : applet 태그는 줄임말이나 머리글자를 표현하는데 사용합니다. 지금은 사용하지 않습니다.</li>
                <li data-name="area"><strong>area</strong> : area 태그는 이미지의 핫스팟 영역을 정의하고, 하이퍼링크를 추가합니다.</li>
                <li data-name="article"><strong>article</strong> : article 태그는 문서, 페이지, 애플리케이션, 또는 사이트 안에서 독립적으로 구분해 배포하거나 재사용할 수 있는 구획을 나타냅니다.</li>
                <li data-name="aside"><strong>aside</strong> : aside 태그는 문서의 주요 내용과 간접적으로만 연관된 부분을 나타냅니다.</li>
                <li data-name="audio"><strong>audio</strong> : audio 태그는 문서에 소리 콘텐츠를 포함할 때 사용합니다.</li>
                <li data-name="b"><strong>b</strong> : b 태그는 독자의 주의를 요소의 콘텐츠로 끌기 위한 용도로 사용합니다.</li>
                <li data-name="base"><strong>base</strong> : base 태그는 문서 안의 모든 상대 URL이 사용할 기준 URL을 지정합니다.</li>
                <li data-name="bdi"><strong>bdi</strong> : bdi 태그는 주위의 텍스트들과는 다른 방향으로 써지는 텍스트 영역을 정의할 때 사용합니다.</li>
                <li data-name="bdo"><strong>bdo</strong> : bdo 태그는 현재 텍스트의 쓰기 방향을 덮어쓰고 다른 방향으로 렌더링 할 때 사용합니다.</li>
                <li data-name="bgsound"><strong>bgsound</strong> : bgsound 태그는 홈페이지 배경음악 삽입할때 사용합니다. 지금은 사용하지 않습니다.</li>
                <li data-name="big"><strong>big</strong> : big 태그는 글자 크기가 큰 텍스트를 정의 할 때 사용합니다. 지금은 사용하지 않습니다.</li>
                <li data-name="blink"><strong>blink</strong> : blink 태그는 텍스트를 깜빡이는게 설정합니다. 지금은 사용하지 않습니다. </li>
                <li data-name="blockquotea"><strong>blockquote</strong> : blockquote 태그는 긴 문장의 인용문을 설정합니다.</li>
            </ul>
        </div>
     </div>
</div>

CSS

css보기
/* header */
#header nav {
    margin: 10px;
}
#header nav li {
    display:inline;
    position: relative;
}
#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: 'Hallym';
}
#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;
}
/* main */
#main {
    margin: 50px 10px;
}
.search_wrap {
    max-width: 1400px;
    margin: 0 auto;
    border: 3px solid var(--htmlColor);
    border-radius: 20px;
    background-color: #f1f3f6;
    padding: 30px;
    text-align: center;
}
.search_wrap > h1 {
    font-family: 'Tmon';
    color: var(--htmlColor);
    font-size: 6vw;
    margin-bottom: 10px;
}
.search_wrap > span {
    font-size: 20px;
    margin-bottom: 20px;
    display: inline-block;
}
.search__box {
    margin-bottom: 20px;
}
.search__box label {
    position:absolute;
    clip:rect(0 0 0 0);
    width:1px;
    height:1px;
    margin:-1px;
    overflow:hidden
}
.search__box input {
    border: 2px solid var(--htmlColor);
    padding: 15px 40px;
    width: 70%;
    border-radius: 50px;
    font-size: 20px;
}
.search__list li {
    text-align: left;
    line-height: 1.7;
}
.search__list li.hide {
    display: none;
}
/* media */
@media(max-width: 600px) {
    .search_wrap {
        padding: 20px;
    }
    .search_wrap > span {
        font-size: 16px;
        margin-bottom: 10px;
    }
    .search_wrap > h1 {
        font-size: 44px;
    }
    .search__box input {
        font-size: 16px;
        padding: 12px 30px;
    }
}

'Effect' 카테고리의 다른 글

SearchEffect03  (3) 2022.08.22
SearchEffect02  (2) 2022.08.17
QuizEffect - 05  (2) 2022.08.15
QuizEffect - 04  (8) 2022.08.08
QuizEffect - 03  (6) 2022.08.05

댓글


자바스크립트

Javascript

자세히 보기
html
css
광고 준비중입니다.
<