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

圖片懶加載的現代 JavaScript 實現,僅需十行代碼

開發
現代瀏覽器提供了 Intersection Observer API,讓我們得以用一種極其高效和簡潔的方式來實現懶加載。多簡潔?核心邏輯只需 10 行代碼。

過去,實現懶加載通常需要監聽 scroll 事件,并結合 getBoundingClientRect() 等方法計算元素位置,代碼不僅繁瑣,而且頻繁的計算會引發性能問題。

現代瀏覽器提供了 Intersection Observer API,讓我們得以用一種極其高效和簡潔的方式來實現懶加載。多簡潔?核心邏輯只需 10 行代碼。

第一步:HTML 結構準備

懶加載的原理很簡單:我們不直接將圖片的 URL 放在 src 屬性里,而是先放在一個自定義的 data-* 屬性(如 data-src)中。src 屬性可以指向一個極小的占位符圖片(比如一個 1x1 像素的透明 GIF 或低質量的模糊圖),以避免出現 broken image 圖標。

第二步:JavaScript 魔法(10 行代碼實現)

現在,讓我們見證奇跡。創建一個 lazy-load.js 文件,并寫入以下代碼:

就是這樣!沒有復雜的計算,沒有混亂的事件監聽器。代碼清晰、高效,并且符合現代 Web 標準。

代碼解析:為什么它能工作?

Intersection Observer (交叉觀察器) 是一個瀏覽器 API,它允許我們異步地觀察目標元素與其祖先元素或頂級文檔視窗(viewport)的交叉狀態。通俗地說,它能高效地告訴我們:“這個元素現在進入/離開屏幕了!”

讓我們分解一下這 10 行代碼:

  • document.querySelectorAll('.lazy'): 我們選中所有帶有 .lazy 類的圖片元素。
  • new IntersectionObserver(callback): 我們創建了一個觀察器。它的構造函數接收一個回調函數,當目標元素的可見性發生變化時,這個回調函數就會被觸發。
  • entries: 這是回調函數接收的參數,是一個數組,包含了所有發生可見性變化的被觀察元素的信息。
  • entry.isIntersecting: 這是一個布爾值,true 代表目標元素至少有一部分進入了視口,false 則代表它完全離開了視口。這是我們實現懶加載的關鍵判斷。
  • img.src = img.dataset.src: 一旦圖片可見,我們就執行核心操作:將存儲在 data-src 中的真實圖片 URL 賦值給 src 屬性。瀏覽器會自動開始下載并顯示圖片。
  • observer.unobserve(img): 這是至關重要的一步優化。一旦圖片被加載,我們就不再需要觀察它了。調用 unobserve 可以告訴觀察器停止對該元素的監視,從而節省了寶貴的計算資源。
  • observer.observe(image): 最后,我們啟動觀察器,讓它開始監視每一個需要懶加載的圖片。

進階優化:預加載

Intersection Observer 還允許我們傳入一個配置對象,來更精細地控制“交叉”的定義。其中 rootMargin 屬性非常有用。

rootMargin 可以在視口(root)的每一邊添加一個“外邊距”,提前或延遲觸發回調。例如,我們可以讓圖片在距離進入視口還有 200px 時就開始加載。

這樣設置后,用戶向下滾動時,圖片會“提前”加載,當圖片真正進入視口時已經準備好了,體驗會更加流暢。

Intersection Observer 不僅代碼量極少,而且在性能上遠超傳統方法,因為它將復雜的計算交給了瀏覽器底層去高效處理,不會阻塞主線程。

責任編輯:趙寧寧 來源: JavaScript
相關推薦

2023-12-06 18:09:01

2022-03-14 09:57:30

Python代碼

2022-07-07 15:50:19

Python開發功能

2023-01-12 08:07:03

Python代碼版權

2022-11-07 07:04:25

2024-03-20 09:31:00

圖片懶加載性能優化React

2020-11-08 14:44:37

VSCode代碼編碼

2016-03-29 10:08:07

2011-01-17 19:35:04

javascriptjqueryweb

2022-03-23 15:32:38

Python開發代碼

2024-06-12 15:59:59

前端JavaScrip識別

2020-02-21 16:51:58

前端可視化傳染病

2022-01-25 12:51:58

Python代碼證件照

2025-02-10 04:01:00

WebSpring工具

2024-08-19 09:04:50

2011-07-22 13:30:52

JavaScript

2015-10-08 10:58:51

圖片懶加載

2022-07-21 10:08:59

代碼K線圖

2024-12-11 09:25:59

2022-05-02 18:29:35

bashshellLinux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一二三区在线观看 | 国产午夜精品福利 | av在线播放一区二区 | 午夜一区二区三区 | 日本激情视频在线播放 | 99久久精品国产毛片 | 日韩精品成人网 | 草草在线观看 | 日本在线综合 | 一区二区三区在线播放 | 日韩一级欧美一级 | 欧美成人影院 | 91在线免费观看 | 亚洲国产精品va在线看黑人 | 日本一区二区影视 | 一区观看 | 亚洲码欧美码一区二区三区 | 欧美成人一区二区三区 | 国产伦一区二区三区视频 | 日韩中文字幕免费在线观看 | 狠狠入ady亚洲精品经典电影 | 欧美精品网站 | 国产无人区一区二区三区 | 国产精品入口久久 | 国产精品178页 | 亚洲小视频在线观看 | 羞羞的视频免费在线观看 | 视频一区二区在线观看 | 一区二区在线视频 | 午夜在线视频 | 成人av片在线观看 | 欧美男人天堂 | 国产成人免费视频网站视频社区 | 久久精品16 | 国产精品亚洲综合 | 在线一区二区三区 | 男人影音| 97色在线观看免费视频 | 国产成在线观看免费视频 | 亚洲三区视频 | 三级在线视频 |