2010-05-27 17 views
3

我正在運行一個在線攝影作品,有時候,1或2張圖片無法加載。刷新將顯示加載失敗的圖像。如果在預設的時間內未完成加載,是否可以重新加載特定圖像? javascript/jquery

場景: 我點擊鏈接,圖像開始加載。但頁面從未完成加載,因爲其中一個圖像加載失敗。刷新後,瀏覽器將失敗的圖像加載爲良好的圖像。只有ctrl + F5可以清除緩存的失敗圖像。

計劃解決方案: 我想要檢測到10secs後未完成加載並使用javascript/jquery動態重新加載它們的圖像。

我找到了一種方法來強制瀏覽器通過在src =「image.jpg?id = dummyNo」後面添加一個虛擬唯一查詢字符串來重新加載圖像。 但我不知道如何檢測哪個圖像沒有完成加載,以便我可以重新加載它們。

可以做到這一點嗎?

在旁註中,我想了解網站壓縮和圖像(加載時間)優化,哪裏會是我閱讀的好地方?

+0

我想你的時候會更好地用試圖找出什麼地方錯了你的主機。對於實際存在於服務器上的圖像,出於神祕原因而不加載的情況並不常見。 (另外,** 10秒?!?**) – Pointy 2010-05-27 16:19:10

+0

由於@Pointy提到,您的服務器/主機存在嚴重問題..將它帶給他們並要求他們修復它.. – 2010-05-27 16:24:36

回答

6

@Pointy和@Gaby在他們的評論中是正確的。儘管如此,我還是很好奇。

這就是我想出它的價值所在。但未經測試。

var images = $('img'); // Get all images. (you'll want to modify the selector 
         // to work with only the desired images) 

images.load(function() {  // Add a load event hander that removes 
    images = images.not(this); // each image from images once loaded. 
}); 

setTimeout(function(){  // After 10 seconds, iterate over each remaining 
    images.each(function() { //  image, reloading each one 
     // reload this image 
    }); 
},10000); // run after 10 seconds 
+0

非常好的解決方案。您可能會考慮使用setInterval而不是setTimeout,並且如果圖像列表是空集,處理程序將取消定時器。這樣你就可以適應第二次嘗試不成功的情況。 – 2013-10-02 00:05:55

0

把下面的代碼在頁面的結尾:

$('img').error(function(){ 
    var src= $(this).attr('src'); 
    if (window.console) { 
     console.log('reload image '+ src); 
    } 
    int i= src.indexOf("&random="); 
    if(i > -1) { 
    src= src.substring(0,i); 
    } 
    i = src.indexOf("?random="); 
    if(i > -1) { 
    src= src.substring(0,i); 
    } 
    if(src.indexOf('?') > -1) { 
     src= src+"&random="+ (new Date().getTime()); 
    } else { 
     src= src+"?random="+ (new Date().getTime()); 
    } 
    $(this).attr('src', src); 
}); 
相關問題