百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

myzbx 2025-08-31 06:04 6 浏览

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

大家好,我是大澈!

本文约 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事件。

相关推荐

微信又双叒叕更新了!这次是安卓版

澎湃新闻综合报道近日安卓版微信正式更新了8.0.10版主要有四大更新日常使用起来会更加方便一起来看看吧1朋友圈视频封面在此之前,朋友圈背景一直只能放静态图片,但此次更新后,可以从视频号中选择一段...

镜子里的你和照片里的你,哪个更真实?

不知道大家有没有这样的经历。聚餐、团建……一群人拍合照,拍完之后,我们满心期待地放大照片,却惊慌失措地发现——怎么自己又被拍得这么丑!但这时,别人总是会说道——「这就是你平常的样子啊。」可是,我们平时...

歼20战斗机现身珠海,首次公开静态展示,体现解放军的自信和强大

日本航空自卫队在9月份举行了三泽基地开发日活动,期间出动12架F-35A闪电II战斗机进行了公开展示,不过仅仅是编队通场飞过而已。日本航空自卫队仅仅动用1架F-35A战斗机进行了机动飞行表演,从公开的...

Java类初始化阶段深度解析:执行顺序与线程安全

一、初始化阶段核心机制二、分步详解与代码验证1.初始化触发条件主动使用场景:publicclassInitTrigger{static{System.out.pr...

深入剖析 Java 类加载机制:原理、优化与实践

作为Java开发者,你是否遇到过这样的场景:线上服务突然抛出NoClassDefFoundError,但本地调试却一切正常;或者明明引入了依赖JAR,却始终报ClassNotFoundExcep...

SUID/SGID是啥?如何让普通用户拥有root的能力?

原文链接:「链接」在Linux系统中,权限控制是一项至关重要的安全机制。除了常见的r(读)、w(写)和x(执行)权限外,还有三种特殊权限位常被忽视:SUID(SetUserID)、SGID...

数码宝贝新世纪:SP奥米加兽AS情报泄露,是否也是强力辅助?

大家好!我是小飉[liáo],欢迎来阅!情怀手游《数码宝贝新世纪》官方不按套路出牌,这次公布的入围测试的人员名单,但是并没有公布SP奥米加兽AS的能力情报,还好广大网友给力。次日,在论坛,以及...

抽象类(abstract class)与接口(interface)

A.核心概念1.抽象类-定义:带有abstract修饰符的类,不能被实例化,用于定义一组方法签名和可选的部分公共实现。-特性:-可以包含字段、构造函数、已实现的方法(带方法体)和抽象方法(...

S39结束时间确定,新赛季段位继承公布,大量皮肤在7月初集体上线

文/静海君如果说之前都还是猜测的话,那游戏内的一个变动,基本100%确定了新赛季(S40)的开启时间。新赛季的开启时间关于新赛季的开启时间,目前主要有两个线索。第一个关于新赛季开启时间的线索是「游戏内...

一篇文章掌握整个JVM,JVM超详细解析!!!

不懂JVM看完这一篇文章你就会非常懂了,文章很长,非常详细!!!先想想一些问题1我们开发人员编写的Java代码是怎么让电脑认识的首先先了解电脑是二进制的系统,他只认识01010101比如我们经常要...

项目用 JDK17 后,bug 少了、速度快了!这 4 个好处太实在

别再死守JDK8了!去年把电商项目升级到JDK17,团队直接爽翻:代码量少写1/3,大促再也不卡顿,运维半夜不call人,连测试都夸bug少了。今天就说真话,JDK17在项目里的4...

法定继承有顺序:在法定继承人中,谁应该优先继承?

免费问律师_法律咨询免费24小时律师在线解答-法临网“父母去世没留遗嘱,兄弟姐妹争遗产闹上法庭!”法定继承中,谁优先拿财产?《民法典》明确“顺序+份额”规则,一文说清关键点,避免家庭内耗!一、法定...

前端必会:ES5寄生继承 vs ES6 Class继承

大家好,我是谦!说到继承,估计不少前端开发者都踩过坑。尤其是在ES5到ES6的过渡阶段,我们写代码时常常被问到:“你用的是原型继承还是Class继承?”再加上面试官特别喜欢追问底层实现——...

子女入了外籍能否继承父母国内的房产呢?

大家好,这里是家理范律,专注遗产继承、婚姻家事领域!-很多加入外籍的朋友都纠结:自己还能继承国内父母的房产吗?答案是可以继承,但流程远比想象复杂!-真实案例:美籍华人张先生,拿着父母在加州公证的遗嘱回...

J.A.C.S | 基于化学类型和靶点的基因组挖掘以寻找一种新的细菌肽脱甲酰酶天然产物抑制剂

大家好,今天推送的文章是2025年6月发表在JournaloftheAmericanChemicalSociety上的“Chemotype-andTarget-DrivenGenome...