久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 3種Javascript圖片預(yù)加載的方法詳解

3種Javascript圖片預(yù)加載的方法詳解

來(lái)源:千鋒教育
發(fā)布人:wjy
時(shí)間: 2022-06-01 11:45:00 1654055100

  預(yù)加載圖片是提高用戶體驗(yàn)的一個(gè)很好方法。Javascript圖片預(yù)加載到瀏覽器中,訪問(wèn)者便可順利地在你的網(wǎng)站上沖浪,并享受到極快的加載速度。

3種Javascript圖片預(yù)加載的方法詳解

  這對(duì)圖片畫(huà)廊及圖片占據(jù)很大比例的網(wǎng)站來(lái)說(shuō)十分有利,它保證了圖片快速、無(wú)縫地發(fā)布,也可幫助用戶在瀏覽你網(wǎng)站內(nèi)容時(shí)獲得更好的用戶體驗(yàn)。本文將分享三個(gè)不同的預(yù)加載技術(shù),來(lái)增強(qiáng)網(wǎng)站的性能與可用性。

  **方法一:用css和JavaScript實(shí)現(xiàn)預(yù)加載**

  實(shí)現(xiàn)預(yù)加載圖片有很多方法,包括使用css、JavaScript及兩者的各種組合。這些技術(shù)可根據(jù)不同設(shè)計(jì)場(chǎng)景設(shè)計(jì)出相應(yīng)的解決方案,十分高效。

  單純使用CSS,可容易、高效地預(yù)加載圖片,代碼如下:

  ```js

  #preload-01 { background: url() no-repeat -9999px -9999px; }

  #preload-02 { background: url() no-repeat -9999px -9999px; }

  #preload-03 { background: url() no-repeat -9999px -9999px; }

  ```

  將這三個(gè)ID選擇器應(yīng)用到(X)html元素中,我們便可通過(guò)CSS的background屬性將圖片預(yù)加載到屏幕外的背景上。

  只要這些圖片的路徑保持不變,當(dāng)它們?cè)赪eb頁(yè)面的其他地方被調(diào)用時(shí),瀏覽器就會(huì)在渲染過(guò)程中使用預(yù)加載(緩存)的圖片。簡(jiǎn)單、高效,不需要任何JavaScript。

  該方法雖然高效,但仍有改進(jìn)余地。使用該法加載的圖片會(huì)同頁(yè)面的其他內(nèi)容一起加載,增加了頁(yè)面的整體加載時(shí)間。

  為了解決這個(gè)問(wèn)題,我們?cè)黾恿艘恍㎎avaScript代碼,來(lái)推遲預(yù)加載的時(shí)間,直到頁(yè)面加載完畢。代碼如下:

  ```js

  function preloader() {

  if (document.getElementById) {

  document.getElementById("preload-01").style.background = "url() no-repeat -9999px -9999px";

  document.getElementById("preload-02").style.background = "url() no-repeat -9999px -9999px";

  document.getElementById("preload-03").style.background = "url() no-repeat -9999px -9999px";

  }

  }

  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);

  ```

  在該腳本的第一部分,我們獲取使用類(lèi)選擇器的元素,并為其設(shè)置了background屬性,以預(yù)加載不同的圖片。

  該腳本的第二部分,我們使用addLoadEvent()函數(shù)來(lái)延遲preloader()函數(shù)的加載時(shí)間,直到頁(yè)面加載完畢。

  如果JavaScript無(wú)法在用戶的瀏覽器中正常運(yùn)行,會(huì)發(fā)生什么?很簡(jiǎn)單,圖片不會(huì)被預(yù)加載,當(dāng)頁(yè)面調(diào)用圖片時(shí),正常顯示即可。

  ## **方法二:僅使用JavaScript實(shí)現(xiàn)預(yù)加載**

  上述方法有時(shí)確實(shí)很高效,但我們逐漸發(fā)現(xiàn)它在實(shí)際實(shí)現(xiàn)過(guò)程中會(huì)耗費(fèi)太多時(shí)間。相反,我更喜歡使用純JavaScript來(lái)實(shí)現(xiàn)圖片的預(yù)加載。

  下面將提供兩種這樣的預(yù)加載方法,它們可以很漂亮地工作于所有現(xiàn)代瀏覽器之上。

  **JavaScript代碼段1**

  只需簡(jiǎn)單編輯、加載所需要圖片的路徑與名稱即可,很容易實(shí)現(xiàn):

  ```js

  ```

  該方法尤其適用預(yù)加載大量的圖片。我的畫(huà)廊網(wǎng)站使用該技術(shù),預(yù)加載圖片數(shù)量達(dá)50多張。將該腳本應(yīng)用到登錄頁(yè)面,只要用戶輸入登錄帳號(hào),大部分畫(huà)廊圖片將被預(yù)加載。

  **JavaScript代碼段2**

  該方法與上面的方法類(lèi)似,也可以預(yù)加載任意數(shù)量的圖片。將下面的腳本添加入任何Web頁(yè)中,根據(jù)程序指令進(jìn)行編輯即可。

  ```js

  ```

  正如所看見(jiàn),每加載一個(gè)圖片都需要?jiǎng)?chuàng)建一個(gè)變量,如“img1 = new Image();”,及圖片源地址聲明,如“img3.src = “../path/to/image-003.gif”;”。參考該模式,你可根據(jù)需要加載任意多的圖片。

  我們又對(duì)該方法進(jìn)行了改進(jìn)。將該腳本封裝入一個(gè)函數(shù)中,并使用 addLoadEvent(),延遲預(yù)加載時(shí)間,直到頁(yè)面加載完畢。

  ```js

  function preloader() {

  if (document.images) {

  var img1 = new Image();

  var img2 = new Image();

  var img3 = new Image();

  img1.src = "";

  img2.src = "";

  img3.src = "";

  }

  }

  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實(shí)現(xiàn)預(yù)加載**

  上面所給出的方法似乎不夠酷,那現(xiàn)在來(lái)看一個(gè)使用Ajax實(shí)現(xiàn)圖片預(yù)加載的方法。該方法利用DOM,不僅僅預(yù)加載圖片,還會(huì)預(yù)加載CSS、JavaScript等相關(guān)的東西。使用Ajax,比直接使用JavaScript,優(yōu)越之處在于JavaScript和CSS的加載不會(huì)影響到當(dāng)前頁(yè)面。該方法簡(jiǎn)潔、高效。

  ```js

  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 = "";

  }, 1000);

  };

  ```

  上面代碼預(yù)加載了“preload.js”、“preload.css”和“preload.png”。1000毫秒的超時(shí)是為了防止腳本掛起,而導(dǎo)致正常頁(yè)面出現(xiàn)功能問(wèn)題。

  下面,我們看看如何用JavaScript來(lái)實(shí)現(xiàn)該加載過(guò)程:

  ```js

  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.;

  // 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 = "";

  }, 1000);

  };

  ```

  這里,我們通過(guò)DOM創(chuàng)建三個(gè)元素來(lái)實(shí)現(xiàn)三個(gè)文件的預(yù)加載。正如上面提到的那樣,使用Ajax,加載文件不會(huì)應(yīng)用到加載頁(yè)面上。從這點(diǎn)上看,Ajax方法優(yōu)越于JavaScript。

  **- End -**

  更多關(guān)于“html5培訓(xùn)”的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的提升班,高品質(zhì)課程助理你實(shí)現(xiàn)夢(mèng)想。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
今日頭條展現(xiàn)量是什么?今日頭條展現(xiàn)量規(guī)則分析

目前頭條用戶會(huì)發(fā)現(xiàn)微頭條和問(wèn)答新增了“展現(xiàn)量”指標(biāo)。那么這個(gè)今日頭條展現(xiàn)量是什么意思呢?如何提高呢?下面千鋒教育小編就和大家說(shuō)...詳情>>

2023-09-19 09:15:47
我想直播帶貨去哪里找貨源一件代發(fā)

現(xiàn)在直播帶貨是一個(gè)非?;鸬男袠I(yè),越來(lái)越多的人進(jìn)入到這個(gè)圈子,但是,認(rèn)真地說(shuō),直播帶貨能不能賺到錢(qián)還是要看自己。雖然這一行業(yè)火,收入高,...詳情>>

2023-09-19 08:41:02
入駐短視頻mcn需要多少錢(qián)?有哪些費(fèi)用?

眾所周知,現(xiàn)在短視頻成了很多人的自媒體創(chuàng)業(yè)道路之一,越來(lái)越多人喜歡在網(wǎng)上消遣時(shí)間,購(gòu)物等。也有很多優(yōu)秀的博主去做出很多新的內(nèi)容,那么入...詳情>>

2023-09-19 08:12:47
短視頻帶貨應(yīng)該注冊(cè)什么公司?需要什么資料?

短視頻大家應(yīng)該都非常熟悉,現(xiàn)在很多人都喜歡在閑暇的時(shí)候刷短視頻,短視頻平臺(tái)也開(kāi)始了直播帶貨,商家也都開(kāi)始創(chuàng)業(yè)了,那么短視頻帶貨需要營(yíng)業(yè)...詳情>>

2023-09-19 08:09:31
怎樣投抖加不花錢(qián)?別人能看出來(lái)嗎?

抖音一些視頻為了獲取更多點(diǎn)擊,一些博主機(jī)會(huì)投抖加。其實(shí)抖加的投放沒(méi)有絕對(duì)正確的方法,而不同賬號(hào)和視頻投放的策略都是不一樣的,不過(guò)一般情...詳情>>

2023-09-19 08:00:10
開(kāi)班信息
北京校區(qū)
  • 北京校區(qū)
  • 大連校區(qū)
  • 廣州校區(qū)
  • 成都校區(qū)
  • 杭州校區(qū)
  • 長(zhǎng)沙校區(qū)
  • 合肥校區(qū)
  • 南京校區(qū)
  • 上海校區(qū)
  • 深圳校區(qū)
  • 武漢校區(qū)
  • 鄭州校區(qū)
  • 西安校區(qū)
  • 青島校區(qū)
  • 重慶校區(qū)
  • 太原校區(qū)
  • 沈陽(yáng)校區(qū)
  • 南昌校區(qū)
  • 哈爾濱校區(qū)