728x90
반응형
프로젝트를 하며 디자이너가 스크롤 컨트롤이 일정 이상 생기면 나타나는 위로가기 버튼을 만들어달라고 했다..ㅎ
어떻게 개발할지 고민도 안하고 바로 만들었다 ㅋㅋ
1. window.pageYOffset를 통해 Scroll 높이 읽어오기
Scroll의 값을 읽어온 후 UseState를 통해 isVisible의 Bool 값을 지정했다.
* window.pageYOffset 현재 문서의 수직 방향으로 스크롤된 픽셀의 양을 나타내는 속성
const [isVisible, setIsVisible] = useState(false);
const handleScroll = () => {
const scrollTop = window.pageYOffset;
if (scrollTop >= 400) {
setIsVisible(true);
} else {
setIsVisible(false);
}
};
2. useEffect와 addEventListener 활용하여 위에 코드에서 작성한 handleScroll를 관리하였다.
Window.addEventListener를 통해 사용자의 스크롤이라는 Event가 발생했을 때 원하는 함수나 기능을 제어할 수 있다.
useEffect(() => {
// 스크롤 이벤트 리스너를 추가
window.addEventListener('scroll', handleScroll);
// 컴포넌트가 언마운트되거나 업데이트되기 직전에 호출되는 함수를 반환
// 이 함수에서는 스크롤 이벤트 리스너를 제거
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
3. 부드럽게 위로 가기 기능 구현
window.scrollTo() 함수를 통해 페이지의 pageYOffset 값이 0이 되도록 하였다.
const handleButtonClick = () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
};
전체 코드
const FloatingActionButton = () => {
const [isVisible, setIsVisible] = useState(false);
const handleButtonClick = () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
};
const handleScroll = () => {
const scrollTop = window.pageYOffset;
if (scrollTop >= 400) {
setIsVisible(true);
} else {
setIsVisible(false);
}
};
useEffect(() => {
window.addEventListener('scroll', handleScroll);
return () => {
window.removeEventListener('scroll', handleScroll);
};
}, []);
return (
<Div>
<FloatingActionButtonComponets onClick={handleButtonClick} isVisible={isVisible}>
<TopArrow src={require('../../../Assets/Img/MainHome_Img/FloatingButtonArrow.png')} />
<TopText>TOP</TopText>
</FloatingActionButtonComponets>
</Div>
);
};
export default FloatingActionButton;
728x90
반응형
'코딩 > React' 카테고리의 다른 글
[React] date-fns와 Style-Components로 커스텀하기 쉬운 달력 만들기 (3편 - 오늘 표시하기 + Event 날짜 표시) (2) | 2023.07.08 |
---|---|
[React] 이미지 자동 슬라이더 carousel 기능 구현하기 (0) | 2023.07.07 |
[React] 배경화면 동영상/사진 - Safari 자동재생 안됨, Chrome 구분하여 자동재생 작동하기 구현 (0) | 2023.07.07 |
[React] date-fns와 Style-Components로 커스텀하기 쉬운 달력 만들기(2편) (0) | 2023.07.06 |
[React] date-fns와 style-components로 커스텀하기 쉬운 달력 만들기(1편) (2) | 2023.07.06 |