」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 延遲載入腳本,例如映像

延遲載入腳本,例如映像

發佈於2024-11-08
瀏覽:332

Lazyload Scripts like Images

近年來html 的最佳改進之一是loading="lazy" 屬性,您可以將其添加到圖像(也包括iframe)中,該屬性將告訴瀏覽器不要載入圖像直到出現在視口中。


    延遲載入腳本,例如映像


非常簡單,非常有用。但如果您也可以對腳本執行此操作,那就太好了。這樣你就可以延遲載入你的元件,只有當它們確實需要時...

嗯,延遲載入腳本,例如映像 元素的另一個功能是能夠在映像使用 onload 和 onerror 屬性載入(或不載入)之後運行腳本。

console.log('圖片已載入')" >

    


此 onload「回呼」僅在載入映像時才會觸發,如果映像是延遲載入的,則僅當圖片位於視窗中時才會觸發。瞧!延遲載入的腳本。

不幸的是,像這樣,它沒有多大用處。首先,您的頁面上會出現不需要的映像,其次,您需要內聯要執行的 JavaScript,這有點違背了延遲載入的目的。因此,讓我們做出一些改變來改進這一點。

影像本身可以是任何東西,或者更重要的是,什麼都不是。正如我之前提到的,有一個 onerror 回調,顧名思義,當圖像

加載時,它將觸發。

這並不意味著您需要將 src 指向不存在的圖像,這會導致控制台充滿關於丟失圖像的紅色 404 錯誤,並且沒有人希望這樣。

如果 src 影像實際上不是影像,也會觸發 onerror 回調,最簡單的方法是使用 data: 格式「錯誤地編碼」影像。這還有一個好處,就是不會在控制台中填充丟失影像的警告?

console.log('圖片未載入')" >

    


這仍然會導致頁面出現「損壞的圖像」縮圖,但我們會解決這個問題。

好吧,但是我們仍然需要內聯我們想要運行的 javascript,那麼我們要如何解決這個問題?

好吧,現在ES 模組支援幾乎是普遍的,我們可以使用非常強大的

event-import-then-default javascript 載入技術在事件觸發後載入腳本,如下所示:

_.default(this))" >

    


注意:這也適用於 onclick、onchange 等事件
注意:底線只是存取模組的簡寫方式,你也可以寫 .then(Module => Module.default(this))

好吧,那這是怎麼回事! ?

首先讓我們來看看某些元件可能會是什麼樣子:

// 一些元件.js 匯出預設元素=> { 元素.outerHTML = `

世界你好!

`; }

    


因此,您可能已經註意到,在 onerror 回調中,我將其作為參數傳遞給預設導出。我這樣做的原因是

this (請原諒雙關語?)是為了給腳本調用它的延遲載入腳本,例如映像 ,因為在this (我又做了一次?)上下文this = .

現在您可以簡單地使用 element.outerHTML 以您的 html 標記替換損壞的映像,然後您就擁有了延遲加載的腳本! ?

快取和傳遞參數

如果您在一個頁面上多次使用此技術,那麼您需要向資料傳遞「快取清除」索引或隨機數:例如,類似:

_.default(this))" > _.default(this))" >

    


「:,」後面的字串可以是任何內容,只要它們不同即可。

將參數傳遞給函數的一個非常簡單的方法是在 html 中使用 data-something 屬性,如下所示:

_.default(this))" >

    


由於我們將 this 傳遞給函數,您可以像這樣存取資料屬性:

匯出預設元素=> { const { 訊息 } = element.dataset 元素.outerHTML = `

${訊息}

`; }

    


請在評論中告訴我您的想法! ❤️

版本聲明 本文轉載於:https://dev.to/paulbrowne/lazyload-scripts-like-images-30e0?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&華儀的函數時,在接受成員函數指針的函數時,要在函數上既要提供指針又可以提供指針和指針到函數的函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此...
    程式設計 發佈於2025-05-03
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 ; $ date->修改('1個月'); //前進1個月 echo $ date->...
    程式設計 發佈於2025-05-03
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中可能會遇到一個衝突,其中3派對軟件包將另一個帶有導入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    程式設計 發佈於2025-05-03
  • 在GO中構造SQL查詢時,如何安全地加入文本和值?
    在GO中構造SQL查詢時,如何安全地加入文本和值?
    在go中構造文本sql查詢時,在go sql queries 中,在使用conting and contement和contement consem per時,尤其是在使用integer per當per當per時,per per per當per. [&​​&&&&&&&&&&&&&&&默元組方法在...
    程式設計 發佈於2025-05-03
  • 如何在GO編譯器中自定義編譯優化?
    如何在GO編譯器中自定義編譯優化?
    在GO編譯器中自定義彙編優化 go中的默認編譯過程遵循特定的優化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    程式設計 發佈於2025-05-03
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-05-03
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,將常數列添加到Spark DataFrame,該列具有適用於所有行的任意值的Spark DataFrame,可以通過多種方式實現。使用文字值(SPARK 1.3)在嘗試提供直接值時,用於此問題時,旨在為此目的的column方法可能會導致錯誤。 df.withCo...
    程式設計 發佈於2025-05-03
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-05-03
  • eval()vs. ast.literal_eval():對於用戶輸入,哪個Python函數更安全?
    eval()vs. ast.literal_eval():對於用戶輸入,哪個Python函數更安全?
    稱量()和ast.literal_eval()中的Python Security 在使用用戶輸入時,必須優先確保安全性。強大的Python功能Eval()通常是作為潛在解決方案而出現的,但擔心其潛在風險。 This article delves into the differences betwee...
    程式設計 發佈於2025-05-03
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“檢測”中的錯誤:在功能檢測中。”當Face Cascade分類器(即面部檢測至關重要的組件)未正確加載時,通常會出現此錯誤。 要解決此問題,必...
    程式設計 發佈於2025-05-03
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-05-03
  • 在Pandas中如何將年份和季度列合併為一個週期列?
    在Pandas中如何將年份和季度列合併為一個週期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 這個目標是通過組合“年度”和“季度”列來創建一個新列,以獲取以下結果: [python中的concate...
    程式設計 發佈於2025-05-03
  • C++20 Consteval函數中模板參數能否依賴於函數參數?
    C++20 Consteval函數中模板參數能否依賴於函數參數?
    [ consteval函數和模板參數依賴於函數參數在C 17中,模板參數不能依賴一個函數參數,因為編譯器仍然需要對非contexexpr futcoriations contim at contexpr function進行評估。 compile time。 C 20引入恆定函數,必須在編譯時進...
    程式設計 發佈於2025-05-03
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-05-03
  • 如何使用“ JSON”軟件包解析JSON陣列?
    如何使用“ JSON”軟件包解析JSON陣列?
    parsing JSON與JSON軟件包 QUALDALS:考慮以下go代碼:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    程式設計 發佈於2025-05-03

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3