搜尋
首頁web前端js教程實作圖片預先載入的三大方法及優缺點分析_javascript技巧

預先載入圖片是提高使用者體驗的一個很好方法。圖片預先載入到瀏覽器中,訪客便可順利地在你的網站上衝浪,並享受到極快的載入速度。這對圖片圖庫及圖片佔據很大比例的網站來說十分有利,它保證了圖片快速、無縫地發布,也可幫助用戶在瀏覽你網站內容時獲得更好的用戶體驗。本文將分享三種不同的預先載入技術,來增強網站的效能與可用性。

方法一:用CSS和JavaScript實作預先載入

實作預先載入圖片有很多方法,包括使用CSS、JavaScript及兩者的各種組合。這些技術可依不同設計場景設計出對應的解決方案,十分高效。
單純使用CSS,可輕鬆、有效率地預先載入圖片,代碼如下:

複製程式碼 程式碼如下:

#preload-01 { background: url(http://domain.tld/image-01.png) no-repeat -9999px -9999px; }   
#preload-02 { background: url(http://domain.tld/image-02.png) no-repeat -9999px -9999px; }   
#preload-03 { background: url(http://domain.tld/image-03.png) no-repeat -9999px -9999px; } 

將這三個ID選擇器應用到(X)HTML元素中,我們便可透過CSS的background屬性將圖片預先載入到螢幕外的背景上。只要這些圖片的路徑保持不變,當它們在Web頁面的其他地方被呼叫時,瀏覽器就會在渲染過程中使用預先載入(快取)的圖片。簡單、高效,不需要任何JavaScript。
此方法雖然高效,但仍有改進空間。使用該法加載的圖片會與頁面的其他內容一起加載,增加了頁面的整體加載時間。為了解決這個問題,我們增加了一些JavaScript程式碼,來推遲預先載入的時間,直到頁面載入完畢。程式碼如下:

複製程式碼 程式碼如下:

// better image preloading @ http://perishablepress.com/press/2009/12/28/3-ways-preload-images-css-javascript-ajax/">http://perishablepress.com/press/2009/12/28/3-ways-preload-images-css-javascript-ajax/">http:// perishablepress.com/press/2009/12/28/3-ways-preload-images-css-javascript-ajax/> function preloader() {   
    if (document.getElementById) {   
        document.getElementById("preload-01").style.background = "url(http://domain.tld/image-01.png) no-repeat -9999px -image-01.png
) no-repeat>         document.getElementById("preload-02").style.background = "url(http://domain.tld/image-02.png) no-repeat -9999px -image-02.png
) no-repeat>         document.getElementById("preload-03").style.background = "url(http://domain.tld/image-03.png) no-repeat -9999px -image-03.png
) no-repeat>     }   
}   
function addLoadEvent(func) {   
    var oldonload = window.onload;   
    if (typeof window.onload != 'function') {   
        window.onload = func;   
    } else {   
        window.onload = function() {   
            if (oldonload) {   
                oldonload();   
            }   
            func();   
        }   
    }   
}   
addLoadEvent(preloader); 

在該腳本的第一部分,我們取得使用類別選擇器的元素,並為其設定了background屬性,以預先載入不同的圖片。
在這個腳本的第二部分,我們使用addLoadEvent()函數來延遲preloader()函數的載入時間,直到頁面載入完畢。
如果JavaScript無法在使用者的瀏覽器中正常執行,會發生什麼事?很簡單,圖片不會被預先加載,當頁面調用圖片時,正常顯示即可。

方法二:僅使用JavaScript實作預先載入

上述方法有時確實很高效,但我們逐漸發現它在實際實現過程中會耗費太多時間。相反,我更喜歡使用純JavaScript來實現圖片的預先載入。下面將提供兩種這樣的預先載入方法,它們可以很漂亮地工作於所有現代瀏覽器之上。

JavaScript程式碼段1
只需簡單編輯、載入所需圖片的路徑與名稱即可,很容易實現:

複製程式碼 程式碼如下:

 

此方法尤其適用預先載入大量的圖片。我的畫廊網站使用該技術,預先載入圖片數量達50多張。將該腳本套用到登入頁面,只要使用者輸入登入帳號,大部分畫廊圖片將會預先載入。

JavaScript程式碼段2
此方法與上面的方法類似,也可以預先載入任意數量的圖片。將下面的腳本加入任何Web頁中,根據程式指令進行編輯即可。

複製程式碼 程式碼如下:


如所看見,每載入一個圖片都需要建立一個變量,如“img1 = new Image();”,及圖片來源位址聲明,如“img3.src =
"../path/to/image-003.gif";」。參考該模式,你可依需要載入任意多的圖片。
我們又對此方法進行了改進。將該腳本封裝入函數中,並使用 addLoadEvent(),延遲預先載入時間,直到頁面載入完成。

複製程式碼 程式碼如下:

function preloader() {   
    if (document.images) {   
        var img1 = new Image();   
        var img2 = new Image();   
        var img3 = new Image();   
        img1.src = "http://domain.tld/path/to/image-001.gif";   
        img2.src = "http://domain.tld/path/to/image-002.gif";   
        img3.src = "http://domain.tld/path/to/image-003.gif";   
    }   
}   
function addLoadEvent(func) {   
    var oldonload = window.onload;   
    if (typeof window.onload != 'function') {   
        window.onload = func;   
    } else {   
        window.onload = function() {   
            if (oldonload) {   
                oldonload();   
            }   
            func();   
        }   
    }   
}   
addLoadEvent(preloader); 

方法三:使用Ajax實作預先載入

上面所給的方法似乎不夠酷,那現在來看一個使用Ajax實作圖片預先載入的方法。此方法利用DOM,不只是預先載入圖片,還會預先載入CSS、JavaScript等相關的東西。使用Ajax,比直接使用JavaScript,優越之處在於JavaScript和CSS的載入不會影響到目前頁面。該方法簡潔、高效。

複製程式碼 程式碼如下:

window.onload = function() {   
    setTimeout(function() {   
        // XHR to request a JS and a CSS         var xhr = new XMLHttpRequest();   
        xhr.open('GET', 'http://domain.tld/preload.js');   
        xhr.send('');   
        xhr = new XMLHttpRequest();   
        xhr.open('GET', 'http://domain.tld/preload.css');   
        xhr.send('');   
        // preload image         new Image().src = "http://domain.tld/preload.png");     }, 1000);   
}; 

上面程式碼預先載入了「preload.js」、「preload.css」和「preload.png」。 1000毫秒的超時是為了防止腳本掛起,而導致正常頁面出現功能問題。

下面,我們來看看如何用JavaScript來實作該載入過程:

複製程式碼 程式碼如下:
window.onload = function() {   
    
    setTimeout(function() {   
    
        // reference to           
        var head = document.getElementsByTagName('head')[0];   
    
        // a new CSS           
        var css = document.createElement('link');   
        css.type = "text/css";   
        css.rel  = "stylesheet";   
        css.href = "
http://domain.tld/preload.css";        
        // a new JS           
        var js  = document.createElement("script");   
        js.type = "text/javascript";   
        js.src  = "
http://domain.tld/preload.js";        
        // preload JS and CSS         head.appendChild(css);   
        head.appendChild(js);   
    
        // preload image           
        new Image().src = "
http://domain.tld/preload.png";        
    }, 1000);   
    
}; 

這裡,我們透過DOM建立三個元素來實現三個檔案的預先載入。正如上面提到的那樣,使用Ajax,載入檔案不會應用到載入頁面。從這一點來看,Ajax方法優越於JavaScript。

好了,本文就先介紹到這裡,三種實現圖片預加載技術的方法大家都已經了解了吧,具體哪個更高效,我想小伙伴們也都看出來了,那就應用到自己的項目中吧。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
利用CSS怎么创建渐变色边框?5种方法分享利用CSS怎么创建渐变色边框?5种方法分享Oct 13, 2021 am 10:19 AM

利用CSS怎么创建渐变色边框?下面本篇文章给大家分享CSS实现渐变色边框的5种方法,希望对大家有所帮助!

css ul标签怎么去掉圆点css ul标签怎么去掉圆点Apr 25, 2022 pm 05:55 PM

在css中,可用list-style-type属性来去掉ul的圆点标记,语法为“ul{list-style-type:none}”;list-style-type属性可设置列表项标记的类型,当值为“none”可不定义标记,也可去除已有标记。

css与xml的区别是什么css与xml的区别是什么Apr 24, 2022 am 11:21 AM

区别是:css是层叠样式表单,是将样式信息与网页内容分离的一种标记语言,主要用来设计网页的样式,还可以对网页各元素进行格式化;xml是可扩展标记语言,是一种数据存储语言,用于使用简单的标记描述数据,将文档分成许多部件并对这些部件加以标识。

css3怎么实现鼠标隐藏效果css3怎么实现鼠标隐藏效果Apr 27, 2022 pm 05:20 PM

在css中,可以利用cursor属性实现鼠标隐藏效果,该属性用于定义鼠标指针放在一个元素边界范围内时所用的光标形状,当属性值设置为none时,就可以实现鼠标隐藏效果,语法为“元素{cursor:none}”。

vue的keep-alive组件如何优化图片加载体验vue的keep-alive组件如何优化图片加载体验Jul 22, 2023 am 08:09 AM

Vue是一种流行的JavaScript框架,可以帮助我们构建交互式的Web应用程序。在开发过程中,我们常常遇到需要加载大量图片的情况,而这往往会导致页面加载速度变慢,影响用户体验。本文将介绍如何利用Vue的keep-alive组件来优化图片的加载体验。为什么需要优化图片加载体验?图片在网页中扮演着非常重要的角色,可以增加网页的吸引力和可读性,提升用户体验。然

css怎么实现英文小写转为大写css怎么实现英文小写转为大写Apr 25, 2022 pm 06:35 PM

转换方法:1、给英文元素添加“text-transform: uppercase;”样式,可将所有的英文字母都变成大写;2、给英文元素添加“text-transform:capitalize;”样式,可将英文文本中每个单词的首字母变为大写。

rtl在css是什么意思rtl在css是什么意思Apr 24, 2022 am 11:07 AM

在css中,rtl是“right-to-left”的缩写,是从右往左的意思,指的是内联内容从右往左依次排布,是direction属性的一个属性值;该属性规定了文本的方向和书写方向,语法为“元素{direction:rtl}”。

css怎么设置i不是斜体css怎么设置i不是斜体Apr 20, 2022 am 10:36 AM

在css中,可以利用“font-style”属性设置i元素不是斜体样式,该属性用于指定文本的字体样式,当属性值设置为“normal”时,会显示元素的标准字体样式,语法为“i元素{font-style:normal}”。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。