2013-03-14 221 views
0

我有一個gif,我在phototshop(一個加載輪),但我發現,我使用它的方式(隱藏,然後用CSS顯示並在以後用JavaScript寫)也是首先是laggy,它在開始的時候確實跳過了難關。所以我決定在我稱之前緩存圖像。所以這是我如何做到這一點:JavaScript沒有緩存圖像

function preloadImages(array) { 
    for (var i = 0; i < array.length; i++) { 
     var img = new Image(); 
     img.src = array[i]; 
     preloadImages.list.push(img); 
    } 
} 

var imageURLs = [ 
    "loading.gif" 
]; 

如果我沒有錯,應該工作。但以防萬一我也嘗試過:

loading = new Image(60,60) 
loading.src = "images/loading.gif" 

我從教程拉。 現在,當我實現這個(當前是第一個),然後通常在稍後調用圖像時,它看起來運行得更快,我可以在緩存中看到它。然而,作爲懷疑論者,我決定放入一張我從來沒有在HTML中使用過的圖片,看看它是否被緩存(因爲它應該),但從來沒有調用它。所以我的繼承人新的JS:

function preloadImages(array) { 
    for (var i = 0; i < array.length; i++) { 
     var img = new Image(); 
     img.src = array[i]; 
     preloadImages.list.push(img); 
    } 
} 

var imageURLs = [ 
    "loading.gif", 
    "today.gif" 
]; 

請注意,我在today.gif加入現在,如果我的緩存的理解是正確的,這個圖像現在應該緩存,即使我從來沒有把它在我的「原始」 HTML是否正確?好吧,不。這讓我懷疑加載gif是否被緩存,或者我的瀏覽器是否決定合作一下。有任何想法嗎?繼承人什麼緩存看起來像重裝後,一個新的明確與使用中的第二個JavaScript代碼段:

cache

所以這裏的問題是:是它的工作即使緩存說,這是不是?我在想象什麼?我是否正確/正確地理解本地緩存是否正確?如果沒有,有人可以向我解釋我哪裏會出錯嗎?乾杯。

+0

你可以檢查瀏覽器工具中的「net」選項卡,看看是否有GIF請求嗎? – 2013-03-14 19:38:25

+1

你在調用預載功能嗎? 'preloadImages(imageURLs);' – 2013-03-14 19:39:14

+0

在'for'循環結束後拋出'alert('ASDF');'看看它是否彈出。 (這個窮人的調試方法。) – 2013-03-14 19:40:14

回答

1

您定義的函數需要一個數組作爲參數。

嘗試preloadImages(["images/loading.gif", "images/today.gif"]);。目前您缺少結束引號而不是傳遞數組,而是使用兩個單獨的字符串作爲參數。

0

你這樣做不正確的 -

當創建內部圖像對象的for循環,做一個閉合功能或以前的對象內將得到由最後一個,它的存在asynchronouse的性質改寫 -

(function(i){ 
var img = new Image(); 
img.src= array[i];}(i)) 

此外,您創建一個列表並將對象推向它是完全沒用的!