document.ready

158 阅读1分钟

2022-12-08

只读属性,返回document的加载状态,有三个可能的值

  • loading 仍在加载
  • interactive 文档加载完,解析完成,但图片、样式等外部资源仍在加载。DOMContentLoaded即将发生
  • complete 文档与所有子资源都完成加载。load 事件即将触发

加载顺序

document.readystate = 'loading'

document.readystate 变成 interactive

DOMContentLoaded 事件触发

document.readystate 变成 complete

load事件触发

可通过readystatechange事件监听document 加载状态

document.addEventListener('readystatechange', () => console.log(document.readyState))

带async 的脚本在加载完后会立即执行,如果想要保证它在DOMContentLoaded之后执行,可能最开始会想到会在脚本中用这种写法

document.addEventListener('DOMContentLoaded',() => {
//代码主体
})

但是异步脚本也可能会在DOMContentLoaded 事件结束后也就是readyState 为complete 阶段才下载完,此时添加的DOMContentLoaded事件已经不会触发,所以此脚本将不再执行

readyState可用于解决这种问题,代码如下

if(document.readyState != 'loading'){
    //code here
}else{
    widnow.addEventListener("DOMContentLoaded", function(){
        //code here
    })
}

document.onreadystatechange

window 指窗体。 window 对象表示浏览器中打开的窗口 document指页面。document 是window 的一个子对象, 一个对象属性 document对象: 代表整个HTML文档,可以用来访问页面中所有的元素

1. document.onreadystatechange // 当页面加载状态改变的时候执行

2. document.ready 函数只需对DOM树等待,而无需对图像活外部资源加载的等待,从而执行起来更快

3.window.onload //表示页面包含图片等文件在内的所有元素都加载完成