深入理解 Document Load 和 Document Ready 的区别

目录

前言:

一、Document Ready

二、Document Load

三、理解和总结


前言:

在前端开发中,理解页面加载的不同阶段是至关重要的。特别是当我们需要在页面加载到特定阶段时执行某些操作时,我们需要知道应该使用 document ready 还是 document load 事件。这两个事件在页面加载过程中发生的时间点不同,它们提供了在不同时间点运行代码的能力。本文将深入探讨 document readydocument load 的区别,以及如何在实际开发中正确使用它们。


Document Ready

  • 触发时机: 当HTML文档被完全加载和解析完成之后,不等待样式表、图像和子框架的加载完成。
  • 常用于: 初始化页面元素和绑定事件处理器。在这个阶段,DOM已经构建完成,可以安全地操作DOM元素。
  • 如何使用:
    • jQuery: $(document).ready(function() { /* 代码 */ });
    • 原生JavaScript: document.addEventListener('DOMContentLoaded', function() { /* 代码 */ });
  1. 用法: document ready 事件在 DOM(文档对象模型)完全加载和解析完成后触发,但在所有外部资源(如图片和样式表)加载完成之前触发。这意味着你可以在这个时间点安全地操作 DOM,但如果你需要计算或操作依赖于外部资源的元素的尺寸或位置,你可能需要等到所有资源都加载完成。

在 jQuery 中,document ready 事件可以这样使用:

$(document).ready(function() {
  // 你的代码
});

或者更简洁的写法:

$(function() {
  // 你的代码
});
  1. 代码:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document Ready Example</title>
  <style>
    img {
      width: 100%;
      height: auto;
    }
  </style>
</head>
<body>
  <h1>Hello, World!</h1>
  <img src="large-image.jpg" alt="Large Image">
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script>
    $(function() {
      alert('DOM is ready!');
      const imgHeight = $('img').height();
      console.log('Image height on document ready:', imgHeight); // 可能为 0
    });
  </script>
</body>
</html>

当 DOM 准备好时,会弹出一个警告框,并在控制台打印出图片的高度。由于这个时候图片可能还没有完全加载,所以打印出的图片高度可能为 0。


Document Load

  • 触发时机: 当整个页面及所有依赖资源如样式表和图片都已完成加载时。
  • 常用于: 执行需要在整个页面完全加载后才能进行的操作,如图片尺寸的计算或者最终的初始化。
  • 如何使用: 通过监听window对象的load事件来实现。

在 jQuery 中,document load 事件可以这样使用:

$(window).on('load', function() {
  // 你的代码
});

  1. 代码:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document Load Example</title>
  <style>
    img {
      width: 100%;
      height: auto;
    }
  </style>
</head>
<body>
  <h1>Hello, World!</h1>
  <img src="large-image.jpg" alt="Large Image">
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script>
    $(window).on('load', function() {
      alert('Page is fully loaded!');
      const imgHeight = $('img').height();
      console.log('Image height on document load:', imgHeight); // 应该是正确的高度
    });
  </script>
</body>
</html>

当整个页面及所有依赖的资源完全加载完成时,会弹出一个警告框,并在控制台打印出图片的高度。这个时候,图片已经完全加载,所以打印出的高度应该是正确的。


三、理解和总结

document readydocument load 事件提供了在页面加载的不同阶段运行代码的能力。document ready 更适合用于操作 DOM 元素,而 document load 更适合用于执行依赖于外部资源的操作。

在实际开发中,选择使用 document ready 还是 document load 取决于你的具体需求。如果你的操作不依赖于外部资源,或者你希望尽快执行代码以提升用户体验,你应该使用 document ready。如果你的操作依赖于外部资源,你应该使用 document load 以确保所有资源都加载完成。

理解这两个事件的区别和适用场景,可以帮助你编写更高效、更可靠的代码,并提升最终用户的体验。

区别

  • 时间点: Document Ready发生得更早,当DOM准备好就会触发,而不必等待其他资源加载完成。Document Load要等到所有资源都加载完成后才会触发。
  • 用途: Document Ready更适合用来初始化DOM元素和设置事件处理器,而Document Load更适合处理依赖于外部资源的任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/107030.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于web和mysql的图书管理系统

系统分为用户端和管理员端 用户端功能如下 登陆注册数据一栏个人信息修改个人信息修改密码图书查询借阅信息借阅状态安全退出 管理员端功能如下 登录个人信息修改个人信息修改密码读者管理书籍管理借阅管理借阅状态安全退出 用户 管理员 源码下载地址 支持&#xff1a;远程…

【Leetcode】【每日一题】【简单】2558. 从数量最多的堆取走礼物

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/take-gifts-from-the-richest-pi…

前端移动web高级详细解析一

01-平面转换 简介 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转、缩放、倾斜&#xff09; 平面转换也叫 2D 转换&#xff0c;属性是 transform 平移 transform: translate(X轴移动距…

Django 实战开发(一)项目搭建

1.项目搭建 用pycharm 编辑器可以直接 New 一个 Django 项目 2.新建应用 python manage.py startapp demo项目结构如下: 3.编写第一个Django 视图函数 /demo/views: from django.http import HttpResponse def welcome(request):return HttpResponse("welcome to dja…

大厂面试题-JVM中的三色标记法是什么?

目录 问题分析 问题答案 问题分析 三色标记法是Java虚拟机(JVM)中垃圾回收算法的一种&#xff0c;主要用来标记内存中存活和需要回收的对象。 它的好处是&#xff0c;可以让JVM不发生或仅短时间发生STW(Stop The World)&#xff0c;从而达到清除JVM内存垃圾的目的&#xff…

AutoCAD 2024 Mac中文附激活补丁 兼容M1.M2电脑

AutoCAD 2024是一款功能强大的CAD设计绘图工具&#xff0c;旨在帮助用户创建和编辑高质量的设计图纸和模型。该软件支持2D和3D设计&#xff0c;具有丰富的功能和工具&#xff0c;可用于绘图、建模、注释、标注、尺寸设置等多种操作。AutoCAD 2024还引入了智能对象捕捉、实时预览…

提升MODBUS-RTU通信数据刷新速度的常用方法

SMART PLC的MODBUS-RTU通信请参考下面文章链接: 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客MODBUS通讯非常简单、应用也非常广泛,有些老生常谈的问题,这里不再赘述,感兴趣的可以参看我的其它博文:SMART200PLC MODBUS通讯专题_RXXW…

python画气泡标尺图

目录 渐变气泡图彩色气泡图 在进行实验结果分析的时候&#xff0c;气泡标尺图能非常清晰对不同的结果进行多维度的比较&#xff0c;特别是在深度学习模型大小和精度进行比较的时候非常合适使用&#xff0c;以下是几个例子。 渐变气泡图 import seaborn as sns import matplotl…

环形链表-力扣

一、题目描述 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 二、题解 解题思路&#xff1a; 快慢指针&#xff0c;即慢指针一次走一步&#xff0c;快指针一次走两步&#xff0c;两个指针从链表起始位置开始运行&#xff0c;…

视频转换器WinX HD Video Converter mac中文特点介绍

WinX HD Video Converter mac是一款功能强大的视频转换器&#xff0c;它可以将各种不同格式的视频文件转换为其他视频格式&#xff0c;以便用户在各种设备上进行播放。WinX HD Video Converter是一个功能强大、易于使用的视频转换器&#xff0c;适用于各种类型的用户&#xff0…

css 三栏布局的实现?

目录 前言 用法 代码 理解 高质量图片 1. 左侧栏 - 导航菜单 2. 中间栏 - 主要内容 3. 右侧栏 - 小部件和广告 布局的响应式设计 三栏布局在前端页面设计中是一个常见的布局方式&#xff0c;通常包含左侧、中间和右侧三个部分。这种布局方式在多种场景中都很受欢迎&am…

linux--

一、crond 任务调度 1、原理示意图 2、crontab 进行定时任务的设置 2.1. 概述 任务调度&#xff0c;是指系统在某个时间执行的特定的命令或程序。任务调度分类&#xff1a; 系统工作: 有些重要的工作必须周而复始地执行。如病毒扫描等 个别用户工作:个别用户可能希望执行某些…

ant design vue 的getPopupContainer

在 ant design vue 中&#xff0c;有几个组件是有 getPopupContainer 属性的&#xff0c;比如&#xff1a;下拉菜单 默认是渲染到body 上的&#xff0c;所以如果你想要对 下拉选择组件 的样式&#xff0c;做修改&#xff0c;如果 style 标签上开启了 scoped&#xff0c;肯定不会…

(四)库存超卖案例实战——优化redis分布式锁

前言 在上一节内容中&#xff0c;我们已经实现了使用redis分布式锁解决商品“超卖”的问题&#xff0c;本节内容是对redis分布式锁的优化。在上一节的redis分布式锁中&#xff0c;我们的锁有俩个可以优化的问题。第一&#xff0c;锁需要实现可重入&#xff0c;同一个线程不用重…

【漏洞复现】酒店宽带运营系统RCE

漏洞描述 安美数字 酒店宽带运营系统 server_ping.php 远程命令执行漏洞 免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff…

Python算法练习 10.28

leetcode 700 二叉搜索树中的搜索 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,…

第7期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

Python 算法高级篇:桶排序与基数排序

Python 算法高级篇&#xff1a;桶排序与基数排序 引言什么是桶排序&#xff1f;桶排序的基本步骤桶排序的示例 什么是基数排序&#xff1f;基数排序的基本步骤基数排序的示例 桶排序与基数排序的应用桶排序的应用基数排序的应用 Python 示例代码总结 引言 在算法高级篇的课程中…

【AICFD案例操作】汽车外气动分析

AICFD是由天洑软件自主研发的通用智能热流体仿真软件&#xff0c;用于高效解决能源动力、船舶海洋、电子设备和车辆运载等领域复杂的流动和传热问题。软件涵盖了从建模、仿真到结果处理完整仿真分析流程&#xff0c;帮助工业企业建立设计、仿真和优化相结合的一体化流程&#x…

Java面试(JVM篇)——JVM 面试题合集 深入理解JVM虚拟机

关于什么是JVM&#xff1f; 作用&#xff1a; 运⾏并管理Java 源码⽂件所⽣成的Class⽂件&#xff0c;在不同的操作系统上安装不同的JVM &#xff0c;从⽽实现了跨平台的保证。 ⼀般情况下&#xff0c;对于开发者⽽⾔&#xff0c;即使不熟悉JVM 的运⾏机制并不影响业务代码的…