2021.03.21 - [Usage/ReactJS] - Table of Contents 스크롤 메뉴 구현
이전 포스트의 확장판입니다.
ToC 스크롤 메뉴가 구현되어 있다는 가정하에 시작하겠습니다.
스크롤의 현재 위치, 동적으로 구현하고픈 페이지의 상단과 하단 위치의 절대 값
//현재 위치가 이곳에 왔을때 active true
const [active, setActive] = useState(false);
const element = useRef(null);
useEffect(() => {
const onScroll = () => {
const scrollTop = window.pageYOffset + 100; //현재 위치
//현재 페이지 상단
const pagePosTop =
element.current.getBoundingClientRect().top + window.pageYOffset;
//현재 페이지 하단
const pagePosBot =
element.current.getBoundingClientRect().bottom + window.pageYOffset;
if (pagePosTop < scrollTop && scrollTop < pagePosBot) {
setActive(true);
} else {
setActive(false);
}
};
if (loc !== 0) {
window.addEventListener("scroll", onScroll);
}
return () => {
window.removeEventListener("scroll", onScroll);
};
}, [active]);
-------
return(
<Page id="fourth" ref={element}>
{* *}
</Page>
)
스크롤이 페이지 영역에 들어왔을때 나타나게끔 css
styled-components를 이용해 active값을 받아 구현
const IconStyle = styled.img`
width: 40rem;
height: 15rem;
animation: ${(props) => (props.active ? "fadein 3s" : "fadeout 3s")};
@keyframes fadein {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeout {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
`;
--------
return (
<IconStyle src="./icon.png" active={active} />
);
728x90
'Usage > ReactJS' 카테고리의 다른 글
React Slick,Styled-components를 활용하여 현재 슬라이드에 border 주기 (0) | 2021.03.22 |
---|---|
Table of Contents 스크롤 메뉴 구현 (0) | 2021.03.21 |
React Tab Menu 구현 (0) | 2021.03.18 |