App.css
@font-face { font-family: 'TTTogether'; src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2001@1.1/TTTogetherA.woff') format('woff'); font-weight: normal; font-style: normal; }
#topBtn {
text-decoration: none;
position: fixed;
bottom: 120px;
right: 40px;
width: 60px;
height: 60px;
color: #fff;
box-shadow: 0 0 15px #4f839750;
border-radius: 50%;
background: rgba(255, 255, 255, .5);
text-align: center;
line-height: 58px !important;
font: normal 16px "TTTogether";
text-transform: lowercase;
z-index: 9999; /* 포지션을 먼저 지정후 z-좌표(레이어) : 9999입니다. */
-webkit-transition: all .8s;
-moz-transition: all .8s;
-o-transition: all .8s;
transition: all .8s;
border: none;
cursor: pointer;
}
#topBtn:hover {
color: #fff;
background: rgba(79, 131, 151, .7);
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
다음과 같이 smooth Contrller 안될때
window.scrollTo({
top: 0,
left: 0,
behavior: "smooth"
});
라이브러리 설치
npm install seamless-scroll-polyfill;
ScrollTop.js
// React와 필요한 훅들을 임포트합니다.
import React, { useCallback, useEffect, useState } from 'react'
// 스크롤 폴리필 라이브러리를 임포트합니다.
import { elementScrollIntoView } from 'seamless-scroll-polyfill';
// ScrollTop 컴포넌트를 정의합니다.
const ScrollTop = () => {
// showButton 상태를 정의하고 초기값을 false로 설정합니다.
const [showButton, setShowButton] =useState(false);
// scrollToTop 함수를 정의합니다. 이 함수는 페이지 최상단으로 스크롤하는 역할을 합니다.
const scrollToTop = useCallback(() => {
elementScrollIntoView(document.getElementById("root"), {
behavior: 'smooth',
});
}, []);
// useEffect 훅을 사용하여 스크롤 이벤트 리스너를 추가합니다.
useEffect(()=>{
const handleShowButton=()=>{
// 스크롤 위치가 500보다 크면 버튼을 보이게 하고, 그렇지 않으면 숨깁니다.
if (window.scrollY > 500) {
setShowButton(true)
} else {
setShowButton(false)
}
}
// 스크롤 이벤트 리스너를 추가합니다.
window.addEventListener("scroll", handleShowButton);
// 컴포넌트가 언마운트될 때 스크롤 이벤트 리스너를 제거합니다.
return ()=>{
window.removeEventListener("scroll", handleShowButton);
}
})
// showButton 상태에 따라 버튼을 렌더링합니다.
return showButton && (
<>
{/* 버튼을 클릭하면 scrollToTop 함수가 실행됩니다. */}
<button type="button" id="topBtn" onClick={scrollToTop} >TOP</button>
</>
)
}
// ScrollTop 컴포넌트를 export 합니다.
export default ScrollTop
위의 코드는 “탑으로 가기” 버튼을 구현한 React 컴포넌트입니다.
사용자가 페이지를 아래로 스크롤하면 버튼이 나타나고, 버튼을 클릭하면 페이지가 최상단으로 부드럽게 스크롤됩니다.
이 컴포넌트는 seamless-scroll-polyfill 라이브러리를 사용하여 스크롤 기능을 구현하고 있습니다.
이 라이브러리는 모든 브라우저에서 부드러운 스크롤을 지원하도록 해줍니다.
이 컴포넌트를 사용하려면 애플리케이션의 적절한 위치에 추가하면 됩니다.
넥스트
"use client"
// React와 필요한 훅들을 임포트합니다.
import React, { useCallback, useEffect, useState } from 'react'
// 스크롤 폴리필 라이브러리를 임포트합니다.
import { elementScrollIntoView } from 'seamless-scroll-polyfill';
// ScrollTop 컴포넌트를 정의합니다.
const ScrollTop = () => {
// showButton 상태를 정의하고 초기값을 false로 설정합니다.
const [showButton, setShowButton] =useState(false);
// scrollToTop 함수를 정의합니다. 이 함수는 페이지 최상단으로 스크롤하는 역할을 합니다.
const scrollToTop = useCallback(() => {
// 페이지의 최상단 요소로 스크롤합니다. 예를 들어, 'body'를 사용해도 됩니다.
elementScrollIntoView(document.body, {
behavior: 'smooth',
});
}, []);
// useEffect 훅을 사용하여 스크롤 이벤트 리스너를 추가합니다.
useEffect(()=>{
const handleShowButton=()=>{
// 스크롤 위치가 500보다 크면 버튼을 보이게 하고, 그렇지 않으면 숨깁니다.
if (window.scrollY > 500) {
setShowButton(true)
} else {
setShowButton(false)
}
}
// 스크롤 이벤트 리스너를 추가합니다.
window.addEventListener("scroll", handleShowButton);
// 컴포넌트가 언마운트될 때 스크롤 이벤트 리스너를 제거합니다.
return ()=>{
window.removeEventListener("scroll", handleShowButton);
}
})
// showButton 상태에 따라 버튼을 렌더링합니다.
return showButton && (
<>
{/* 버튼을 클릭하면 scrollToTop 함수가 실행됩니다. */}
<button type="button" id="topBtn" onClick={scrollToTop} >TOP</button>
</>
)
}
// ScrollTop 컴포넌트를 export 합니다.
export default ScrollTop














댓글 ( 4)
댓글 남기기