检测DOM是否已加载完成?分享 1 段优质 JS 代码片段!

boyanx3个月前技术教程11

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!

大家好,我是大澈!

本文约 700+ 字,整篇阅读约需 1 分钟。

今天分享一段优质 JS 代码片段,实现如何在页面加载的不同阶段执行不同的操作。

老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

window.addEventListener("DOMContentLoaded", () => {
  switch (document.readyState) {
    case "complete":
      console.log('DOM 已完全加载');
      break;
    case "interactive":
      console.log('DOM 已准备好,但资源仍在加载');
      break;
  }
});

window.addEventListener("load", () => {
  switch (document.readyState) {
    case "complete":
      console.log('所有资源已加载完成');
      break;
    case "interactive":
      console.log('DOM 已准备好,但资源仍在加载');
      break;
  }
});


分享原因

这段代码展示了如何利用 DOMContentLoaded 和 load 事件来检测页面加载状态,并基于 document.readyState 的值进行相应的处理。

在实际开发中,可能会遇到需要根据网页加载状态执行特定操作的情况,且不能去使用 JS 框架,通过这段代码,可以给你一定思路。

代码解析

1. window.addEventListener("DOMContentLoaded", ...)

监听 DOMContentLoaded 事件。

这个事件会在 DOM 树构建完成,但外部资源(如图片、样式表等)尚未加载完毕时才触发。

2. window.addEventListener("load", ...)

监听 load 事件。

该事件会在页面的所有资源(包括 DOM、图片、样式表、脚本等)都加载完成后才触发。

3. switch (document.readyState)

根据 document.readyState 的值进行不同的操作。

虽然 load 事件通常在 document.readyState 变为 complete 时触发,DOMContentLoaded 事件通常在 document.readyState 变为 interactive 后不久触发,但检查状态可以更精确,并且有助于处理一些特殊情况或异常情况。

document.readyState 可以有以下值:

uninitialized:XML 对象被产生,但没有任何文件被加载。

loading:document 正在下载文件,尚未开始解析。

loaded:部分的文件已经加载且进行解析,但对象模型尚未生效。

interactive:document 完成了解析,但是资源还在下载,对象模型是有效但只读的。此时会在 document 和 window 对象上触发DOMContentLoaded事件。

complete:代表所有资源完成加载。此时会在 window 对象上触发load事件。

标签: js 播放视频

相关文章

10秒视频4460万播放量,“波霸吸管”在 TikTok 赢麻了

近几年来,欧美的绿色消费话题不断升温,不少欧美消费者越来越看重环境保护相关的产品,背后也涌现出了近千亿的绿色商机。据相关数据显示,美国网民在购物时,有 38.4% 的 Z 世代和 49.6% 千禧一代...

罗云熙古装打戏花絮:行云流水间的坚守与光芒

在娱乐圈的浩瀚星空中,古装剧一直是备受观众喜爱的题材,而其中精彩绝伦的打戏更是让人热血沸腾。近日,罗云熙古装打戏的花絮流出,瞬间在网络上掀起了一阵热潮。那行云流水的动作,仿佛将观众带入了一个刀光剑影、...

AV线与AV接口(JSJ金山角AV线线缆指南)

在家庭影院系统里的视频线和音频线(音视频线),我们一般称为AV线。平常我们对于AV线好坏的选购,两条功能相同的AV线如果去对比好坏。判断线材前提需要具备以下条件:① 首先,两条线材的价格和档次要是想接...

JSJ金山角通用指南——监控线水晶头怎么接 监控网线4个水晶头接法

前言:监控网络水晶头如何接?在网络电缆中监控总共八根线。水晶头金属板根据国际标准面向自己,网线从左到右放入网线钳,转一圈后把八根网线按顺序排好,随后,用仪器测试八芯长度,一致代表已经压好水晶头。如果线...

LPL:新王诞生!TES3-2复仇JDG夺得LPL夏季赛冠军

北京时间8月27日下午,英雄联盟9周年盛典的首日迎来LPL夏季赛总决赛,对阵双方为今年LPL春季赛决赛的老对手——春季赛新科冠军JDG vs MSC季中杯冠军TES!在TES率先拿到赛点的情况下JDG...

凯蒂·普莱斯在新男友 JJ 的支持下,穿着紧身连体裤重振流行乐坛

凯蒂·普莱斯 (Katie Price) 身着一身奇装异服,惊喜亮相今年在伦敦南部布罗克韦尔公园举办的 Mighty Hoopla 音乐节。凯蒂·普莱斯 (Katie Price)在今年的 Might...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。