
1. 문제의 발단
개발을 처음 시작했을 때 스터디원들과 참고할 만한 사이트 같은걸 찾다가 들어가 본 Airpods pro 사이트는 정말 지금 봐도 놀랍다. 디자인 UX 전부 완벽한 것 같다. 어쨌든 저런 스크롤 이벤트를 알아보고 나도 걸음마는 때 보려고 한다.
2. 어떻게 하나요?
- useState를 이용해 state 값으로 스크롤 수치를 만든다.
-
import React, { useState } from "react"; const [scrollPosition, setScrollPosition] = useState(0); function Page { <div> <div>스크롤되면 색이 변합니다!</div> </div> }
-
- Handler 함수를 만들고, useEffect로 스크롤 수치를 계속 업데이트한다.
-
import React, { useState, useEffect } from "react"; const [scrollPosition, setScrollPosition] = useState(0); const updateScroll = () => { setScrollPosition(window.scrollY || document.documentElement.scrollTop); }; useEffect(() => { window.addEventListener("scroll", updateScroll); }, []); function Page { <div> <div>스크롤되면 색이 변합니다!</div> </div> }
-
- className을 삼항 연산자로 원하는 수치만큼의 스크롤이 되면 바꿔주게 만든다.
-
import React, { useState, useEffect } from "react"; const [scrollPosition, setScrollPosition] = useState(0); const updateScroll = () => { setScrollPosition(window.scrollY || document.documentElement.scrollTop); }; useEffect(() => { window.addEventListener("scroll", updateScroll); }, []); function Page { <div> <div className={scrollPosition > 100 ? "scroll-text" : "scrolled-text"}>스크롤되면 색이 변합니다!</div> </div> }
-
.scroll-text { font-size: 5rem; transition: 1.5s; } .scrolled-text { font-size: 5rem; color: red; transition: 1.5s; }
-
3. 결과물

'Coding > Today I Learned' 카테고리의 다른 글
2022.01.30(Sun.) <React에서 SASS/SCSS 사용하기> (0) | 2022.01.30 |
---|---|
2022.01.29(Sat.) <CSS position으로 요소들 배치하기> (0) | 2022.01.29 |
2022.01.27(Tue.) <React에서 keyframes로 애니메이션 만들기> (0) | 2022.01.27 |
2022.01.26(Wed.) <자바스크립트에서 소수 구하기> (0) | 2022.01.26 |
2022.01.23(Sun.) <React 에서 Tailwind CSS 써 보기> (0) | 2022.01.23 |