window.scrollTo() + refFrontend/UI&UX2021. 8. 18. 23:17
Table of Contents
window.scrollTo()
- 어떤 페이지에서 위로가기 화살표를 누르면 맨 위로 이동하거나 메뉴에서 어떤 버튼을 누르면 아래로 내려가버리는 버튼을 눌러본 경험이 있을 것이다.
- window.scrollTo()은 스크롤을 움직여주는 window의 내장 함수이다.
window.scrollTo() 사용법
- 아래처럼 window.scollTo()의 파라미터로 x, y의 좌표를 직접 넣을 수 있고
...
<button onClick={() => {
window.scrollTo(0,0);
}}>위로가기</button>
...
- 딕셔너리의 형태로 top, left의 위치를 넣어줄 수도 있다.
...
<button onClick={() => {
window.scrollTo({top: 0, left: 0});
}}>위로가기</button>
...
- 위와 같이 버튼에 이벤트를 달아서 버튼을 클릭했을 때 맨 위로 이동하게 만들어보자.
import logo from './logo.svg';
import './App.css';
import styled from 'styled-components';
const App = () => {
return (
<div>
<Topbar>맨위</Topbar>
<Button onClick={() => {
window.scrollTo(0, 0);
}}>클릭</Button>
</div>
);
}
export default App;
const Topbar = styled.div`
width: 300px;
height: 100px;
background-color: blue;
font-size: 70px;
`;
const Button = styled.button`
margin-top: 1500px;
width: 300px;
height: 100px;
font-size: 70px;
`;
- 버튼을 클릭했을 때 부드럽지 않게 갑자기 확 맨위로 이동하는 모습을 볼 수 있다.
스크롤 부드럽게 하기
- 만약 스크롤을 부드럽게 하고 싶으면 딕셔너리 형태에 behavior 키 값을 추가한 다음 "smooth"라는 value 값을 주면 된다!
...
<button onClick={() => {
window.scrollTo({top: 0, left: 0, behavior: "smooth"});
}}>위로가기</button>
...
- 위를 이용해서 버튼을 눌렀을 때 부드럽게 맨 위로 스크롤 하게 만들어보자!
useRef를 이용해서 스크롤 하기 (개꿀)
- 이동하고 싶은 요소를 ref로 지정한 후에 current.offsetTop 속성을 이용해서 해당 요소로 스크롤 할 수 있다.
import logo from './logo.svg';
import './App.css';
import styled from 'styled-components';
import { useRef } from 'react';
const App = () => {
const xy = useRef(null);
return (
<div>
<Topbar ref={xy}>맨위</Topbar>
<Button onClick={() => {
window.scrollTo({top: xy.current.offsetTop, left: 0,behavior: "smooth"});
}}>클릭</Button>
</div>
);
}
export default App;
const Topbar = styled.div`
width: 300px;
height: 100px;
background-color: blue;
font-size: 70px;
`;
const Button = styled.button`
margin-top: 1500px;
width: 300px;
height: 100px;
font-size: 70px;
`;
'Frontend > UI&UX' 카테고리의 다른 글
tailwind-css (0) | 2022.06.11 |
---|---|
무한 스크롤 - infinite scroll (0) | 2022.06.11 |
이미지 업로드, 미리보기 (0) | 2021.11.19 |
react-toastify (0) | 2021.09.29 |
Swiper 만들기 (0) | 2021.08.30 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!