[NUTEE] 검색 : 스크롤 시 검색 데이터 요청
검색 기능 구현3 - 스크롤 시 검색 데이터 요청
스크롤 시 추가로 검색 데이터 더 불러오기
- 사용자가 스크롤을 하였을 때 추가 포스트가 있다면 검색 데이터 더 불어오게 설정
화면 사이즈
-
window.pageYOffset : 현재 문서가 수직으로 얼마나 스크롤 됐는지 픽셀 단위로 반환
- scrollY의 다른 이름, pageYOffset와 차이점은 scrollY의 경우만 IE에서 작동했었음.
-
clientHeight : 내부 높이, 사용자의 눈에 보이는 콘텐츠와 padding값을 포함한 높이
- padding 값 포함 + scrollbar, border, margin 값 제외
-
scrollHeight : 현재 스크롤을 한 전체 콘텐츠의 높이
- padding, border 값 포함 + margin 값 제외
- 추가 : offsetHeight - 눈에 보이는 콘텐츠와 padding, border, scrollbar 값을 포함한 높이
- 크기 정리 : client < offset < scroll
정리
- 현재 스크롤 길이(pageOffset) + 사용자의 화면 높이(clientHeight) > 현재 스크롤한 전체 콘텐츠 높이(scrollHeight) - 300
- 위 공식 중 scrollHeight의 값에서 300을 뺀 이유는 다 내려가기 전에 검색 데이터를 불러오기 위해서!
구현 코드
- ** 간소화로 인해 코드 중 일부 생략된 부분이 있을 수 있습니다.
useEffect(() => {
const onScroll = () => {
if (window.pageYOffset + document.documentElement.clientHeight
> document.documentElement.scrollHeight - 300) {
if (hasMorePost) {
dispatch({
type: LOAD_SEARCH_POSTS_REQUEST,
lastId: searchPosts[searchPosts.length - 1] && searchPosts[searchPosts.length - 1].id,
data: text,
});
}
}
};
window.addEventListener('scroll', onScroll);
return () => {
window.removeEventListener('scroll', onScroll);
};
}, [searchPosts.length, hasMorePost]);