
scroll 이벤트롤 통해 스크롤링이 일어날 때 마다 화면 전체의 height와 스크롤 위치를 통해 스크롤이 컨텐츠 끝 즈음에 다다랐는지 확인하고 처리하는 방식intersection observer 방식?
scrollY + window.innerHeight는 viewport의 가장 밑바닥 절대 위치를 알려준다.
clientHeight 는 요소의 내부 높이이다. 패딩 값은 포함되며, 스크롤바, 테두리, 마진은 제외offsetHeight 는 요소의 높이입니다. 패딩, 스크롤 바, 테두리(Border)가 포함되고 마진은 제외된다.scrollHeight 는 요소에 들어있는 컨텐츠의 전체 높이입니다. 패딩과 테두리가 포함되고 마진은 제외된다.
스크롤과 관련된 정보
window.pageXOffset 속성은 선택한 요소의 가로 스크롤 값(브라우저 기준)을 가져온다.
window.pageYOffset 속성은 선택한 요소의 세로 스크롤 값(브라우저 기준)을 가져온다.
window.scrollX 속성은 선택한 요소의 가로 스크롤 값(브라우저 기준)을 가져온다.
window.scrollY 속성은 선택한 요소의 세로 스크롤 값(브라우저 기준)을 가져온다.
window.scroll() 메서드는 선택한 요소에 스크롤 값을 설정한다.
window.scrollTo() 메서드는 선택한 요소에 스크롤 값(상대 위치)을 설정한다.
window.scrollBy() 메서드는 선택한 요소에 스크롤 값(절대 위치)을 설정한다.
element.scrollLeft 속성은 선택한 요소에 가로 스크롤 값을 가져오거나 설정한다.
element.scrollTop 속성은 선택한 요소에 세로 스크롤 값을 가져오거나 설정한다.
element.scrollIntoView() 메서드는 선택한 요소를 기준으로 이동하거나 설정한다.
let timer;
document.querySelector('#input').addEventListener('input', function(e) {
if(timer) {
clearTimeout(timer);
}
timer = setTimeout(function() {
// 실행 코드 내용
}, 2000);
});
이벤트가 발생할 때마다 이전에 설정해둔 내용을 clear시키고 다시 새로 timer를 설정해준다. 설정해둔 시간(여기서는 2000ms) 내에 이벤트가 다시 발생하지 않으면 이벤트 발생이 끝난 것으로 생각해서 적어둔 코드 내용이 실행된다.
ajax 검색에서 디바운싱을 많이 사용하는 것 같다.
let timer;
document.querySelector('.body').addEventListener('scroll', function (e) {
if (!timer) {
timer = setTimeout(function() {
timer = null;
// 실행할 코드 내용
}, 2000);
}
});
timer에 값이 없으면 timer를 설정해준다. 일정 시간이 지난 후에는(위에서는 2000ms) 스스로를 해제시킨 후 작성한 내용을 실행시킨다.
디바운싱은 이벤트가 연속적으로 계속 발생하더라도 모두 무시하고 설정한 특정 시간동안 이벤트가 발생하지 않았을 때 맨 마지막 이벤트를 딱 한번 발생시킨다. 하지만 쓰로틀링은 설정한 특정 시간 주기로 계속 실행이 된다. 따라서 실행 시키고 싶은 코드 내용이 특정 시간 주기로 실행이 되긴 한다.
intersection observer 는 Target Element 가 화면에 노출되었는 지 여부를 간단하게 구독할 수 있는 API 이다.threshold(0.5: 절반, 1: 전체) 값으로 observe(감시) 대상이 얼마나 노출되어 있는지에 따라 동작하게 할 수 있다.