UI
2023-05-02 04:33

html이 아래와 같은 구조로 되어있다고 하자.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./index.css">
<title>Fast Bank</title>
</head>
<body>
<div id="main-img-wrapper">
<img width="320" src="./Lovepik_com-401339128-data-management-data-analysis-icon-free-vector-illustration-mate.png"
alt="coding image">
</div>
<div id="intro-main">
<p>이미 모두의 은행, 패스트뱅크</p>
<p>함께 일해요.</p>
<p id="join-us-text">Join us!</p>
<img id="down-arrow-icon" src="./down-arrow.png" alt="down arrow icon">
</div>
<ul id="list-item-wrapper">
<li class="list-item">26주적금</li>
<li class="list-item">저금</li>
<li class="list-item">패스트캠퍼스</li>
<li class="list-item">떡볶이</li>
<li class="list-item">치킨</li>
<li class="list-item">축구</li>
<li class="list-item">축구선수</li>
<li class="list-item">마이너스통장대출</li>
<li class="list-item">26주적금</li>
<li class="list-item">저금</li>
<li class="list-item">패스트캠퍼스</li>
<li class="list-item">떡볶이</li>
<li class="list-item">치킨</li>
<li class="list-item">축구</li>
<li class="list-item">축구선수</li>
<li class="list-item">마이너스통장대출</li>
<li class="list-item">26주적금</li>
<li class="list-item">저금</li>
<li class="list-item">패스트캠퍼스</li>
<li class="list-item">떡볶이</li>
<li class="list-item">치킨</li>
<li class="list-item">축구</li>
<li class="list-item">축구선수</li>
<li class="list-item">마이너스통장대출</li>
<li class="list-item">26주적금</li>
<li class="list-item">저금</li>
<li class="list-item">패스트캠퍼스</li>
<li class="list-item">떡볶이</li>
<li class="list-item">치킨</li>
<li class="list-item">축구</li>
<li class="list-item">축구선수</li>
<li class="list-item">마이너스통장대출</li>
</ul>
</body>
html스크롤을 내릴 때 아래 이미지처럼 텍스트의 색상을 변경할 것이다.
먼저, 콘솔에 scrollY 값을 출력해서 리스트의 첫번째 아이템에 스크롤 값과 마지막 아이템의 스크롤 값을 변수에 저장한다.
const startY = 373
const endY = 1585
javascript그리고 querySelectorAll로 리스트 아이템을 가져온다.
const listItems = document.querySelectorAll('.list-item')
javascriptendY 값에서 startY 값을 뺀 후에 리스트의 갯수로 나눠서 division 변수에 저장한다.
이 division은 아이템 간의 간격이 된다.
전체 스크롤 값에서 startY 를 뺀 후에 division으로 나누면 targetIndex 값을 구할 수 있다.
아래는 전체 코드이다.
const listStyleChangeStartY = 373
const listStyleChangeEndY = 1585
const listItems = document.querySelectorAll('.list-item')
const division = (listStyleChangeEndY - listStyleChangeStartY) / listItems.length
window.addEventListener("scroll", () => {
if (document.getElementById("on")) document.getElementById("on").removeAttribute("id")
if (window.scrollY > listStyleChangeStartY && window.scrollY < listStyleChangeEndY) {
const targetIndex = Math.floor((window.scrollY - listStyleChangeStartY) / division)
listItems[targetIndex].id = "on"
}
})
javascript