간단한 가로 스크롤바 만들기
참고 자료
소스코드
import React, { useCallback, useEffect, useState } from "react";
import styled from "styled-components";
const Parralax = () => {
const [progress, setProgress] = useState<number>(0);
const handleEvent = useCallback((): void => {
const { scrollTop } = document.documentElement; // y축으로 스크롤한 거리
const { scrollHeight } = document.body; // body 태그(전체 컨텐츠)의 height
const { outerHeight } = window; // 브라우저의 창 전체의 height
// scrollTop + outerHeight를 하게 되면 scrolHeight 결과값이 나온다.
const per = Math.round((scrollTop / (scrollHeight - outerHeight)) * 100);
setProgress(per);
}, []);
useEffect(() => {
window.addEventListener("scroll", handleEvent);
}, []);
return (
<StyledParralax>
스크롤
<StyledProgress1 />
<StyledProgress2 progress={progress} />
</StyledParralax>
);
};
export default Parralax;
const StyledParralax = styled.div`
padding: 50px;
color: white;
font-weight: 700;
font-size: 40px;
background: linear-gradient(
150deg,
black,
red,
orange,
yellow,
green,
blue,
pink,
purple
);
height: 10000px;
`;
const StyledProgress1 = styled.div`
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 5px;
background-color: white;
`;
const StyledProgress2 = styled.div<{ progress: number }>`
position: fixed;
top: 0;
left: 0;
width: ${({ progress }) => `${progress}%`};
height: 5px;
background-color: #0066ff;
transition: width 0.3s;
`;
실제 구현 화면
'Etc' 카테고리의 다른 글
TIL | Docker CRA Dockerizing, 컨테이너 생성 (0) | 2021.11.26 |
---|---|
TIL | Docker 컨테이너 쉘환경 접근 및 이미지 생성 (0) | 2021.11.21 |
TIL | Meta tag (0) | 2021.11.07 |
TIL | Proxy Server (0) | 2021.10.26 |
TIL | Eslint custom (2) | 2021.10.25 |