일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- app router
- 결정 알고리즘
- 리터럴 타입
- recoil
- 무한 스크롤
- 이분 검색
- map
- autosize
- Cypress
- useAppDispatch
- 타입 좁히기
- RTK Query
- Promise
- 공변성
- async/await
- Jest
- CI/CD
- SSR
- 인터섹션
- 반공변성
- dfs
- webpack
- ESlint
- React
- TS
- CORS
- 호이스팅
- 태그된 유니온
- tailwind
- 투포인터
Archives
- Today
- Total
짧은코딩
스크롤 맨 위로 올리기 with react-custom-scrollbars 본문
반응형
무한 스크롤을 구현하고 나서 아이템을 많이 불러왔을 때, 맨 위로 올리는 버튼이 있으면 좋겠다는 생각이 들었다. 그래서 맨 위로 올라가는 버튼을 만들려고 했는데 스크롤을 다루기가 은근히 까다로워서 글로 기록하려 한다.
사용한 라이브러리는 "react-custom-scrollbars"이다. useRef도 같이 사용해서 구현했다.
구현 설계
1. 스크롤이 어느 정도 내려가고 나서 위로 올라가는 버튼이 나타난다.
2. "/"와 "/searchitem" 경로에서만 버튼이 나타나도록한다.
구현
const App = () => {
const { pathname } = useLocation();
const ref = useRef<Scrollbars>(null);
const [positionY, setPositionY] = useState(0);
const handleScroll = (e: any) => {
setPositionY(e.target.scrollTop);
};
const onScrollTop = () => {
ref.current?.scrollTop(0);
};
return (
<Scrollbars ref={ref} onScroll={handleScroll}>
<StatusBar />
// 내용들..
{positionY > 1000 &&
(pathname === "/" || pathname.slice(0, 11) === "/searchitem") && (
<ScrollTop onClick={onScrollTop}>
<FaArrowUp />
<span>TOP</span>
</ScrollTop>
)}
</Scrollbars>
);
};
- Scrollbars 컴포넌트에서 onScroll(handleScroll)을 통해 스크롤의 현재 px를 알아내서 postionY에 저장했다.
- ref를 Scrollbars에 설정하고 onScrollTop을 이용하여 스크롤이 맨 위로 올라가게 했다.
- positionY가 1000px을 넘고 pathname이 "/"이거나 "/searchitem"이면 위로 올라가는 버튼이 보이도록 했다.
구현 결과
반응형
'wayc 이커머스 프로젝트' 카테고리의 다른 글
무한 스크롤 값 저장 방식 수정 with 공식 사이트 (0) | 2024.01.08 |
---|---|
MSW1 사용 중 Warning: captured a request without a matching request handler (2) | 2024.01.03 |
전체 상품 불러오기 무한 스크롤 구현 with react-intersection-observer (0) | 2023.12.26 |
Webpack의 HMR과 자동 새로고침 현상 (0) | 2023.11.12 |
로그인 전략 with Cookie (0) | 2023.10.24 |
Comments