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

boyanx4个月前技术教程26

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

大家好,我是大澈!

本文约 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 播放视频

相关文章

开心!小杨阿姨带着俩孩子去宜兰海边玩耍,小杨阿姨硬杠网友。

周末这一天,宜兰海边那叫一个热闹非凡。汪小菲的保姆小杨阿姨,趁着这难得的闲暇,带着孩子们来到了这片美丽的海边。天空虽然灰蒙蒙的,像被一块巨大的灰色幕布遮住了太阳公公的脸,但这丝毫没有影响大家的好心情。...

乱码シスギ1

/hsuwiwuwuwy67woddgwjwkqlhekwmwahksjeejkekdjejehww545464gshwkqj///shsjsjwiwjjwwjjwwjjahagqjqjwjwhwjw...

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

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

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

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

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

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

海外网友热议V5淘汰JDG:对线酒桶,369的杰斯也玩得像屎一样

LPL季后赛败者组第一场JDG和V5的比赛,最终V5成功以3-1的战绩淘汰JDG,晋级下一轮,仍然保留了争夺春季赛冠军的机会。很快这场比赛也引发了大量海外网友的热议,一起来看看他们是如何评价的吧!-3...

发表评论    

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