成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:Window.onload 和 DOMContentLoaded 的區別

開發 前端
DOMContentLoaded? 事件在 HTML 解析完成后觸發,不會等待圖片、CSS 資源加載,而 ?window.onload? 需要等待所有資源加載完成才觸發。

window.onload 和 DOMContentLoaded 都是頁面加載相關的事件,但它們觸發的時機不同,主要區別如下:

1. DOMContentLoaded 事件

當 HTML 完全解析并構建 DOM 后觸發,但 不等待 CSS、圖片、JS 資源加載完成。

觸發時機:

  • 只要 HTML 解析完成并構建了 DOM,就會觸發 DOMContentLoaded。
  • 不會等待 CSS、圖片、iframe 加載完成,所以它的觸發時間更早。

適用場景

  • 希望盡早操作 DOM,例如動態修改頁面結構、綁定事件監聽器。
  • 對圖片、CSS 不依賴的 JS 操作,例如表單校驗、事件監聽等。

示例

document.addEventListener("DOMContentLoaded", function() {
  console.log("?? DOM 解析完畢!");
});

 輸出時機:頁面結構加載完成,但圖片、CSS 可能還未加載完。

2. window.onload 事件

當 HTML、CSS、JS、圖片、iframe 及所有外部資源都加載完成后才觸發。

觸發時機:

  • 等所有資源加載完成(包括 CSS、圖片、iframe、視頻等) 后才觸發。
  • 比 DOMContentLoaded 晚,尤其是如果頁面有大量圖片、視頻時,window.onload 可能會很慢。

適用場景

  • 需要確保所有資源都加載完畢,例如:

a.獲取圖片寬高

b.操作 canvas

c.計算 offsetWidth、offsetHeight

d.頁面統計(如 Google Analytics)

e.依賴外部 API(如廣告、第三方 SDK)

示例

window.onload = function() {
  console.log("? 所有資源加載完成!");
};

輸出時機:等頁面所有資源加載完畢才觸發,可能比 DOMContentLoaded 晚很多。

3. DOMContentLoaded vs window.onload 觸發順序

事件

觸發時機

依賴資源加載

適用場景

DOMContentLoaded

HTML 解析完成,DOM 構建完成

? 不等待 CSS/圖片/iframe

適合盡早操作 DOM

window.onload

所有資源(HTML、CSS、JS、圖片等)加載完成

? 需要等待所有資源

適合依賴圖片/視頻的操作

4. 示例對比

HTML

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>測試頁面</title>
<script>
    document.addEventListener("DOMContentLoaded", function() {
      console.log("?? DOMContentLoaded 觸發");
    });

    window.onload = function() {
      console.log("? window.onload 觸發");
    };
  </script>
</head>
<body>
<h1>測試頁面</h1>
<img src="https://via.placeholder.com/600x400" alt="測試圖片">
</body>
</html>

可能的輸出順序

?? DOMContentLoaded 觸發
? window.onload 觸發

 DOMContentLoaded 先觸發,因為它不等待圖片加載。

5. 面試官可能的追問

 面試官:為什么 DOMContentLoaded 不會等待圖片加載?
回答因為 DOMContentLoaded 只需要 HTML 解析完成并構建 DOM,而不會等待圖片、CSS 資源的加載

 面試官:什么時候必須使用 window.onload 而不是 DOMContentLoaded?
回答

  • 需要確保圖片、CSS、iframe 資源加載完成 的場景,如:

a.獲取圖片尺寸(img.width)

b.操作 canvas(必須等圖片加載完)

c.執行外部 API 或廣告代碼

 面試官:如何在 DOMContentLoaded 之后監聽 onload?
回答

document.addEventListener("DOMContentLoaded", function() {
  console.log("DOM 加載完成");
  window.onload = function() {
    console.log("所有資源加載完成");
  };
});

這樣可以 先執行 DOM 操作,再等待資源加載。

總結

對比項

DOMContentLoaded

window.onload

觸發時機

HTML 解析完畢,DOM 結構就緒

所有資源(HTML、CSS、圖片等)加載完畢

是否等待 CSS 加載

? 不等待

? 等待

是否等待圖片加載

? 不等待

? 等待

適用場景

綁定事件監聽、修改 DOM

依賴圖片、CSS、廣告 SDK

最佳面試回答 "DOMContentLoaded 事件在 HTML 解析完成后觸發,不會等待圖片、CSS 資源加載,而 window.onload 需要等待所有資源加載完成才觸發。如果只需要操作 DOM,應該用 DOMContentLoaded;如果依賴圖片、CSS 資源加載,則使用 window.onload。" 

責任編輯:姜華 來源: 大遷世界
相關推薦

2023-07-05 15:55:26

性能優化開發分析工具

2025-03-10 11:40:00

前端開發HTML

2025-03-10 00:00:00

property?attributeHTML

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2022-09-13 14:44:40

HashMap哈希表紅黑樹

2021-05-12 08:20:53

開發

2023-02-17 08:10:24

2024-04-03 15:33:04

JWTSession傳輸信息

2024-09-19 08:42:43

2015-08-13 10:29:12

面試面試官

2024-09-25 12:26:14

2025-03-07 08:44:47

Typescriptiinterfacetype

2021-12-13 06:56:45

Comparable元素排序

2021-05-14 08:34:32

UDP TCP場景

2024-03-20 15:12:59

KafkaES中間件

2021-12-23 07:11:31

開發

2021-08-17 07:15:16

Git RebaseGit Merge面試

2022-05-16 11:04:43

RocketMQPUSH 模式PULL 模式

2024-10-31 09:30:05

線程池工具Java

2023-01-30 15:39:40

GETHTTP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频久久久久 | 日韩在线中文字幕 | 国产99久久精品一区二区永久免费 | 中文字幕在线一区 | 亚洲国产精品第一区二区 | 一区二区三区四区在线 | 欧美一级特黄aaa大片在线观看 | 久久国产精品一区 | 亚洲欧美日韩成人在线 | 中文字幕在线播放第一页 | 视频1区| 久久黄网| 超碰人人91 | 国产精品网址 | 久精品视频 | www.久久久久久久久 | 91精品国产综合久久久久久丝袜 | 亚洲欧美一区二区三区在线 | 亚洲aⅴ | 亚洲高清电影 | 色噜噜亚洲男人的天堂 | 成人免费观看男女羞羞视频 | 亚洲人成人网 | 日韩三级电影一区二区 | 国产精品免费观看 | 欧美午夜一区 | 午夜欧美| av天天看 | 一区二区三区国产精品 | 中文字幕在线视频一区二区三区 | 羞羞视频免费在线 | 黄色av免费网站 | 男女羞羞视频在线看 | 精品一区二区观看 | 91精品国产日韩91久久久久久 | 亚洲一区二区在线免费观看 | 狠狠综合久久av一区二区小说 | 国产一区二区三区四区在线观看 | 国产亚洲第一页 | 日韩欧美在线一区 | 韩日有码 |