# 6.页面生命周期

DOMContentLoaded,load,beforeunload,unload

  • DOMContentLoaded —— 浏览器已完全加载 HTML,并构建了 DOM 树,但像 和样式表之类的外部资源可能尚未加载完成。
  • load —— 浏览器不仅加载完成了 HTML,还加载完成了所有外部资源:图片,样式等。
  • beforeunload/unload —— 当用户正在离开页面时。

tips:

  1. DOMContentLoaded 不会等待 CSS 样式加载,但是会等待 JS 脚本加载

  2. 当 DOM 准备就绪时,document 上的 DOMContentLoaded 事件就会被触发。在这个阶段,我们可以将 JavaScript 应用于元素。

    • 诸如 <script>...</script> 或 <script src="..."></script> 之类的脚本会阻塞 DOMContentLoaded,浏览器将等待它们执行结束。
    • 图片和其他资源仍然可以继续被加载。
  3. 当页面和所有资源都加载完成时,window 上的 load 事件就会被触发。我们很少使用它,因为通常无需等待那么长时间。

  4. 当用户想要离开页面时,window 上的 beforeunload 事件就会被触发。如果我们取消这个事件,浏览器就会询问我们是否真的要离开(例如,我们有未保存的更改)。

  5. 当用户最终离开时,window 上的 unload 事件就会被触发。在处理程序中,我们只能执行不涉及延迟或询问用户的简单操作。正是由于这个限制,它很少被使用。我们可以使用 navigator.sendBeacon 来发送网络请求。

    • document.readyState 是文档的当前状态,可以在 readystatechange 事件中跟踪状态更改:
    • loading —— 文档正在被加载。
    • interactive —— 文档已被解析完成,与 DOMContentLoaded 几乎同时发生,但是在 DOMContentLoaded 之前发生。
    • complete —— 文档和资源均已加载完成,与 window.onload 几乎同时发生,但是在 window.onload 之前发生。

# document.ready 和 window.onload

像 jquery、zepto 等类库中都有 document 一个 ready 方法,来确保我们的操作在初始 dom 加载之后进行,原生 dom 定义里是没有这个 api 的,

  • ready 事件在 DOM 结构绘制完成之后就会执行,这样能确保就算有大量的媒体文件没加载出来,JS 代码一样可以执行。

  • 可以同时写多个

  • onload 事件必须等到网页中所有内容全部加载完毕之后才被执行。如果一个网页中有大量的图片的话,则就会出现这种情况:网页文档已经呈现出来,但由于网页数据还没有完全加载完毕,导致 load 事件不能够即时被触发。

  • 不能同时写多个,后面的将会覆盖前面的

# 哪个先执行?

  • ready 先执行
  • iframe 加载,会阻塞 window.onload。

# document 和 window 的区别

# Document 对象

  • document.body 等价于 window.document.body 每个载入浏览器的 HTML 文档都会成为 Document 对象。

Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

提示:Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。

# Window 对象

  • Window 对象表示浏览器中打开的窗口。

如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。

# 页面生命周期:DOMContentLoaded,load,beforeunload,unload

  1. DOMContentLoaded —— 浏览器已完全加载 HTML,并构建了 DOM 树,但像 和样式表之类的外部资源可能尚未加载完成。
  2. load —— 浏览器不仅加载完成了 HTML,还加载完成了所有外部资源:图片,样式等。
  3. beforeunload/unload —— 当用户正在离开页面时。
Last Updated: 6/3/2024, 1:08:34 AM