페이지 로딩이벤트, 인터랙션 작업을 하다보면 정말 자주 이용하게 되는거 같습니다.
평소엔 $(function(){}) 원툴로 사용하고 있었는데,
이번에 프로젝트를 하면서 알게 된 readystatechange를 정리해보려고 합니다.
document.addEventListener("readystatechange", function (e) {
if (e.target.readyState === "loading") {
console.log("문서가 로딩 중");
} else if (e.target.readyState === "interactive") {
console.log("문서는 파싱되었지만 이미지, 스타일, 프레임은 여전히 로딩 중");
} else if (e.target.readyState === "complete"){
console.log("모든 리소스 로딩");
}
}
이게 기본적인 틀입니다. 문서의 로딩 상태가 변화함에 따라 event가 발생되는 듯 합니다.
로딩 상태에 대해 정리해드리자면,
readystatechange 이벤트는 유사한 역할을 하는 DOMContentLoaded나 load 이벤트보다 먼저 발생한다고 합니다.
🚩 지원브라우저)
기본 레이아웃)
document.addEventListener("DOMContentLoaded", function(e){
// DOM이 준비되면 실행되는 코드
});
🚩 주의사항)
function ready() {
alert('DOM이 준비되었습니다!');
// 이미지가 로드되지 않은 상태이기 때문에 사이즈는 0x0입니다.
alert(`이미지 사이즈: ${img.offsetWidth}x${img.offsetHeight}`);
}
document.addEventListener("DOMContentLoaded", ready);
위 예시에서 DOMContentLoaded 핸들러는 문서가 로드되었을 때 실행됩니다. 따라서 핸들러 아래쪽에 위치한 img뿐만 아니라 모든 요소에 접근할 수 있습니다.
그렇지만 이미지가 로드되는 것은 기다리지 않기 때문에 alert 창엔 이미지 사이즈가 0이라고 뜹니다.
기본 레이아웃)
window.onload = function() {
// 모든 리소스가 로드된 후 실행되는 코드
};
🚩 주의사항1)
window.onload = function() { // window.addEventListener('load', (event) => {와 동일합니다.
alert('페이지 전체가 로드되었습니다.');
// 이번엔 이미지가 제대로 불러와 진 후에 얼럿창이 실행됩니다.
alert(`이미지 사이즈: ${img.offsetWidth}x${img.offsetHeight}`);
};
아래 예시에서 window.onload는 이미지가 모두 로드되고 난 후 실행되기 때문에 이미지 사이즈가 제대로 출력되는 것을 확인할 수 있습니다.
🚩 주의사항2)
window.addEventListener('load', function() {
console.log('첫 번째 함수');
});
window.addEventListener('load', function() {
console.log('두 번째 함수');
});
기본 레이아웃)
$(function() {
// DOM이 준비되면 실행되는 코드(jQuery 사용 필요)
});
차이점을 요약하자면
글 잘 봤습니다, 감사합니다.