728x90
반응형
비동기로 불러온 데이터 sessionStorage에 저장
페이징 처리를 비동기로 한 경우 뒤로가기 시 스크롤 위치를 가져오기 위해서는 조회해서 불러온 데이터의 정보도 같이 저장해 둬야 함
이를 위해 sessionStorage에 스크롤 정보 및 조회한 데이터 정보를 저장함
또한 비동기로 페이징 처리 한 경우 스크롤의 위치는 callBack함수에서 설정해줘야 함
// 뒤로가기, 새로고침 시 정보를 계속해서 합치지 않도록 구분하는 값
let scrollSearching = false;
// 데이터 조회해서 페이징 처리하는 함수 예시
function axiosPaging(){
axios({
}).then(function (response) {
// 뒤로가기, 새로고침인 경우 페이지 정보 ssesionStorage에서 가져오기
if(!scrollSearching && performance.getEntriesByType("navigation")[0].type === 'back_forward'
|| performance.getEntriesByType("navigation")[0].type === 'reload') {
response.data.result = JSON.parse(sessionStorage.getItem("resultData"));
scrollSearching = true; // 스크롤로 데이터 조회 시 정보를 한번 더 가져오지 않도록 구분하는 값
}
…
if (Utils.isNull(response.data) == false) {
if (response.data.status == 200 && Utils.isNull(response.data.result) == false) {
// 조회 결과
var result = response.data.result;
// 페이지 정보
page.no = pageNo;
page.totalPage = Utils.isNull(result.totalPage) == true ? page.totalPage : result.totalPage;
page.totalCount = Utils.isNull(result.totalCount) == true ? page.totalCount : result.totalCount;
page.isLast = Utils.isNull(result.lastPage) == true ? page.isLast : result.lastPage;
(페이지 html 구성)
}
}
…
// 뒤로가기 스크롤 정보 가져오기 위해 페이지 정보 저장
if(page.no === 1){ // 1페이지 인 경우 불러온 모든 데이터 sessionStorage에 저장
sessionStorage.setItem("resultData", JSON.stringify(response.data.result));
}else { // 데이터 합쳐서 sessionStorage에 저장
const obj = JSON.parse(sessionStorage.getItem("resultData"));
obj.productList.push(...response.data.result.productList);
const resultData = response.data.result;
resultData.productList = obj.productList;
sessionStorage.setItem("resultData", JSON.stringify(resultData));
}
savedScrollTo(); // 스크롤 위치 설정
}).catch(function (error) {
// 에러난 경우 실행
});
}
스크롤 위치 저장 및 불러오기
아래의 코드 처럼 스크롤 위치를 설정하고 callBack함수에서 savedScrollTo()를 호출
스크롤 위치 저장하는 코드는 이전글 참고하기🍋
/**
* 스크롤이 움직일때마다 값을 sessionStorage에 넣어줌
*/
let scrollHeight = 0;
addEventListener('scroll', (event) => {
scrollHeight = $(document).scrollTop();
sessionStorage.setItem("scrollY", scrollHeight);
});
/**
* 스크롤 위치 지정
*/
function savedScrollTo(){
if (window.performance && performance.getEntriesByType("navigation")[0].type === 'back_forward'
|| performance.getEntriesByType("navigation")[0].type === 'reload') {
const scrollY = parseInt(sessionStorage.getItem("scrollY"));
if(scrollY && scrollY > 0){
window.scrollTo(0, scrollY);
}
}
};
반응형
'프로그래밍 > JavaScript' 카테고리의 다른 글
[JavaScript] 문서의 DOM이 모두 로드된 후 실행하기 (로딩의 순서) (0) | 2022.12.09 |
---|---|
[JavaScript] 데이터 타입 확인 (0) | 2022.11.30 |
[JavaScript] localStorage와 sessionStorage 차이점 (0) | 2022.11.23 |
[JavaScript] 자바스크립트 스크롤 위치 저장 (0) | 2022.11.22 |
[JavaScript] 자바스크립트 뒤로가기 시 이벤트 (0) | 2022.11.21 |