除了load和DOMContentLoaded还有哪些方法可以判断页面加载完成
除了 window.addEventListener("load") 和 document.addEventListener('DOMContentLoaded') 之外,还有其他方法可以判断页面加载完成。以下是一些常见的方法:
-
使用
readystatechange 事件:
readystatechange 事件会在文档的读取状态改变时触发。可以通过检查document.readyState 的值来判断页面是否加载完成。document.addEventListener('readystatechange', function() { if (document.readyState === 'complete') { // 页面加载完成 console.log('Page fully loaded'); } }); -
使用
jQuery 的 $(document).ready() :
如果你在使用 jQuery,可以使用$(document).ready() 方法来判断 DOM 是否已经加载完成。$(document).ready(function() { // DOM 加载完成 console.log('DOM fully loaded'); }); -
使用 MutationObserver:
使用MutationObserver 可以检测 DOM 变化,并在页面加载完成时执行特定操作。const observer = new MutationObserver((mutations, observer) => { if (document.readyState === 'complete') { // 页面加载完成 console.log('Page fully loaded'); observer.disconnect(); // 停止观察 } }); observer.observe(document, { childList: true, subtree: true }); -
使用 Promise 和
requestAnimationFrame:
通过requestAnimationFrame 循环检查document.readyState,并使用 Promise 来处理异步操作。function pageLoaded() { return new Promise(resolve => { if (document.readyState === 'complete') { resolve(); } else { const checkReadyState = () => { if (document.readyState === 'complete') { resolve(); } else { requestAnimationFrame(checkReadyState); } }; requestAnimationFrame(checkReadyState); } }); } pageLoaded().then(() => { // 页面加载完成 console.log('Page fully loaded'); });
这些方法各有优点,具体使用哪种方法取决于你的具体需求和应用场景。
function ready(fn) {
if (document.readyState !== 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
}