2012-09-27 103 views
1

我對所有的Javascript資料仍然陌生,我必須誠實地說,我還沒有試驗任何與我的問題有關的東西。jQuery,如何預加載圖像並在圖像加載時得到通知?

我想知道是否有一種方法或插件與jQuery預加載多個圖像和圖像加載時調用函數?

+0

可能重複://計算器。 com/questions/4506825/preload-images-using-jquery) –

回答

2

您可以使用load事件來處理圖像,但它們有一些跨瀏覽器問題(這取決於您定位的平臺)。

var allImgs = $("#container img").filter(function() { return ! this.complete; }); 
var allImgsLength = allImgs.length; 

allImgs.on("load", function() { 
    if (--allImgsLength) { 
     // Images have loaded. 
    } 
}); 

如果你不介意的話,包括一個插件,有waitForImages(免責聲明:我寫的),其中處理這個比較好聽。 :)

你會使用它就像...

$("#container").waitForImages(function() { 
    // Images have loaded. 
}); 

如果你不想使用jQuery的一切,你能適應的第一個例子。如果您只指定現代瀏覽器...

var allImgs = [].filter.call(document.querySelectorAll("#container img"), 
          function(img) { 
           return ! img.complete; 
          }); 
var allImgsLength = allImgs.length; 

[].forEach.call(allImgs, function(img) { 
    img.addEventListener(function() { 
     if (--allImgsLength) { 
      // Images have loaded. 
     } 
    }); 
}); 

如果你必須支持舊的瀏覽器...(HTTP [使用jQuery預先載入圖像]的

var allImgs = document.getElementById("container").getElementsByTagName("img"); 
var allImgsLength = allImgs.length; 
var i; 
var eventCallback = function() { 
         if (--allImgsLength) { 
          // Images have loaded. 
         } 
        }; 

for (i = 0; i < allImgsLength; i++) { 
    if (allImgs[i].complete) { 
     allImgsLength--; 
    } 

    if (allImgs[i].addEventListener) { 
     allImgs[i].addEventListener("load", eventCallback); 
    } elseif (allImgs[i].attachEvent) { 
     allImgs[i].attachEvent("onload", eventCallback); 
    } else { 
     allImgs[i].onload = eventCallback; 
    } 
} 
+0

感謝您的回覆。所以,如果我的理解正確,我可以創建一個不可見的div容器,在其中放置一些圖像,當它們全部加載時,我將能夠獨立於div檢索圖像並將它們放在不同的倍數中容器我想要的方式?圖像已經被加載了? – SlashJ

+0

@Armz是的,你可以做到這一點。這不是嚴格意義上的插件設計,但我在過去取得了成功。 – alex

+0

棒極了,豎起大拇指! – SlashJ