Search Effect04
이번 시간에는 find()를 활용하여 만든 검색 프로그램에 대해 알아보겠습니다.
속성을 검색하면 설명이 나옵니다.
+속성박스를 클릭하면 설명이 나옵니다.
01. HTML
스크립트로 불러오기 위해서 search__list를 삭제했고 search__desc가 추가되었습니다.
코드 보기
{
<main id="main">
<div class="search__wrap">
<span>find()를 이용하여 속성을 검색하면 설명 보여주기</span>
<h1>CSS 속성 검색하기</h1>
<div class="search__box">
<label for="search">검색하기</label>
<input type="text" id="search" placeholder="CSS 속성 및 유형을 입력해주세요!">
</div>
<div class="search__desc">
속성을 검색하시면 화면이 표시됩니다!!!
</div>
<div class="search__info">
<div>전체 속성 갯수 : <span class="num">0</span></div>
</div>
<div class="search__list">
</div>
</main>
}
02. CSS
박스와 돋보기에 대한 CSS가 추가 되었습니다.
코드 보기
{
/* main */
#main {
margin: 50px 10px;
}
.search__wrap {
max-width: 1400px;
margin: 0 auto;
border: 3px solid #223547;
border-radius: 20px;
background-color: #F1F3F6;
padding: 30px;
text-align: center;
}
.search__wrap > span {
font-size: 20px;
margin-bottom: 20px;
display: inline-block;
}
.search__wrap > h1 {
font-family: 'Tmon';
color: #223547;
font-size: 6vw;
margin-bottom: 10px;
}
.search__box {
margin-bottom: 40px;
}
.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 #223547;
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;
}
.search__list li.show {
display: block;
}
.search__list span {
display: inline-block;
padding: 10px 20px;
border: 1px solid var(--htmlColor);
border-radius: 50px;
margin-bottom: 5px;
text-align: left;
transition: all 0.3s;
cursor: pointer;
}
.search__list span:hover {
background-color: var(--htmlColor);
color: #fff;
}
.search__info {
text-align: right;
margin-bottom: 30px;
padding-bottom: 10px;
border-bottom: 1px dashed var(--htmlColor);
}
.search__info .type {
text-align: center;
margin-bottom: 10px;
}
.search__info .keyword {
text-align: center;
margin-bottom: 10px;
}
.search__info .keyword span {
border: 2px solid var(--htmlColor);
border-radius: 50px;
padding: 10px;
display: inline-block;
margin-bottom: 4px;
}
.search__info .keyword span:hover {
background-color: var(--htmlColor);
color: #fff;
cursor:pointer;
}
.search__desc {
padding: 20px 40px 20px 60px;
margin-bottom: 50px;
border-radius: 50px;
display: inline-block;
background: var(--htmlColor);
color: #fff;
background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='11' cy='11' r='8' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M16.5 16.958L21.5 21.958' stroke='%23ffffff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: 22px 17px;
}
}
03. JAVASCRIPT
1. 출력 : map() 메서드를 이용해서 전체속성 개수와 cssProperty 데이터를 출력합니다.
2. 입력 : searchBox에 addEventListener("keyup")을 걸고 searchBox의 value값을 저장시켜서 findProperty에 넣어줍니다.
3. 속성 찾기 : findProperty 함수를 만들고 그 안에서 cssProperty안에 있는 데이터(name)에 대해서 find() 메서드를 이용해서 찾아줍니다.
조건문을 걸어서 일치하는 데이터를 찾지 못한 경우에는 "해당 속성은 존재하지 않습니다. 다시 검색해주세요!" 메시지를 출력해주고 return으로 종료시킵니다.
4. 미션 : 1번에서 출력된 데이터를 선택해서 searchListspan 변수를 만들어주고 forEach와 addEventListener를 돌려서 속성박스 클릭시 desc박스에 cssProperty 설명이 나오게 출력해줍니다.
{
const cssProperty = [
{ name: "accent-color", desc: "특정 요소에 색상을 지정할 때 사용됩니다." },
{ name: "align-content", desc: "콘텐츠 아이템의 상하관계 정렬 상태를 설정합니다." },
{ name: "align-items", desc: "콘텐츠 아이템의 내부 상하관계 정렬 상태를 설정합니다." },
{ name: "align-self", desc: "개별적인 콘텐츠 아이템의 정렬 상태를 설정합니다." },
{ name: "all", desc: "요소의 속성을 초기화 또는 상속을 설정합니다." },
{ name: "animation", desc: "애니메이션과 관련된 속성을 일괄적으로 설정합니다." },
{ name: "animation-delay", desc: "애니메이션 지연 시간을 설정합니다." },
{ name: "animation-direction", desc: "애니메이션 움직임 방향을 설정합니다." },
{ name: "animation-duration", desc: "애니메이션 움직임 시간을 설정합니다." },
{ name: "animation-fill-mode", desc: "애니메이션이 끝난 후의 상태를 설정합니다." },
{ name: "animation-iteration-count", desc: "애니메이션의 반복 횟수를 설정합니다." },
{ name: "animation-name", desc: "애니메이션 keyframe 이름을 설정합니다." },
{ name: "animation-play-state", desc: "애니메이션 진행상태를 설정 합니다." },
{ name: "animation-timeline", desc: "x" },
{ name: "animation-timing-function", desc: "애니메이션 움직임의 속도를 설정 합니다." },
{ name: "appearance", desc: "운영체제 및 브라우저에 기본적으로 설정되어 있는 테마를 기반으로 요소를 표현합니다." },
{ name: "aspect-ratio", desc: "요소의 크기를 비율대로 조정할 수 있게 합니다." },
{ name: "backdrop-filter", desc: "요소 뒤 영역에 흐림이나 색상 시프트 등 그래픽 효과를 적용할 수 있는 속성입니다." },
{ name: "backface-visibility", desc: "입체적인 모습의 뒷면의 가시성을 결정하는 속성이다." },
{ name: "background", desc: "백그라운드 속성을 일괄적으로 설정 합니다." },
{ name: "background-attachment", desc: "배경 이미지의 고정 여부를 설정 합니다." },
{ name: "background-blend-mode", desc: "배경을 혼합했을 때 그래픽 효과를 설정 합니다." },
{ name: "background-clip", desc: "백그라운드 이미지의 위치 기준점을 설정 합니다." },
{ name: "background-color", desc: "백그라운드 색을 설정 합니다." },
{ name: "background-image", desc: "백그라운드 이미지 속성을 설정 합니다." },
{ name: "background-origin", desc: "백그라운드 이미지의 위치 기준점을 설정하기 위한 속성입니다." },
{ name: "background-position", desc: "백그라운드 이미지의 위치 영역을 설정 합니다." },
{ name: "background-position-x", desc: "백그라운드 이미지의 x축 위치 영역을 설정 합니다." },
{ name: "background-position-y", desc: "백그라운드 이미지의 y축 위치 영역을 설정 합니다." },
{ name: "background-repeat", desc: "백그라운드 이미지 반복 여부를 설정 합니다." },
{ name: "background-size", desc: "백그라운드 이미지 사이즈를 설정 합니다." },
{ name: "block-size", desc: "기록 모드에 따라서, 요소의 블록의 수평과 수직 크기를 정의합니다." },
{ name: "border", desc: "테두리 속성을 일괄적으로 설정 합니다." },
...
];
// 선택자
const searchList = document.querySelector(".search__list");
const searchNum = document.querySelector(".search__info .num");
const searchBox = document.querySelector(".search__box input");
const searchDesc = document.querySelector(".search__desc");
// 출력하기
cssProperty.map((element, index) => {
searchNum.innerText = index + 1;
searchList.innerHTML += `<span>${element.name}</span>`;
});
// 입력하기
searchBox.addEventListener("keyup", ()=>{
const searchWord = searchBox.value;
// console.log(searchWord);
findProperty(searchWord);
});
// 속성 찾기
function findProperty(searchData){
const targetData = cssProperty.find((data) => data.name === searchData);
if(targetData == null){
searchDesc.textContent = "해당 속성은 존재하지 않습니다. 다시 검색해주세요!"
return;
}
searchDesc.textContent = targetData.desc;
};
// 미션(클릭시 설명 나오게)
const searchListspan = document.querySelectorAll(".search__list span");
searchListspan.forEach((e, i) => {
e.addEventListener("click", () => {
searchDesc.textContent = cssProperty[i].desc;
});
});
}
'Javascript응용_Effect' 카테고리의 다른 글
Parallax Effect 06 (2) | 2022.09.30 |
---|---|
Mouse Effect 06 (2) | 2022.09.30 |
Mouse Effect 05 (3) | 2022.09.28 |
Mouse Effect 04 (2) | 2022.09.22 |
Mouse Effect 03 (4) | 2022.09.22 |
댓글