2016-10-20 28 views
0

我完全新的JavaScript和jQuery和我有以下問題,我是不是能夠解決通過閱讀其他SO Q &作爲:JQuery的:等待改變形象src屬性加載

我有一種函數,用於獲取圖像的路徑(/API/currentImage)並且想要更改imgsrc屬性,然後在1秒後重復其自身。到目前爲止,這麼好,下面的代碼工作。但是:如果圖像很大,圖像本身的GET可能需要很長時間(超過1秒)。所以我不想在AJAX請求完成時執行setTimeout,而是在最後加載圖像時(「$('img').attr("src", r1[0])完成後加載圖像」)。

loadImg = function() { 
    $.when(
    $.ajax({ 
     url: "/API/currentImage" 
    }), 
    $.ajax({ 
     url: "/API/currentId" 
    }) 
).done(function(r1, r2) { 
    $('#iid').text(r2[0]) 
    $('img').attr("src", r1[0]) 
    window.setTimeout(function() { 
     loadImg() 
    }, 1000) 
    }) 
} 

我該如何做到這一點?

+1

http://stackoverflow.com/questions/3877027/jquery-callback-on-image-load-even-when-the-image-is-cached – Blazemonger

+0

[檢查圖像是否加載(無錯誤)在JavaScript中](http://stackoverflow.com/questions/1977871 /檢查 - 如果圖像是加載 - 沒有錯誤 - 在JavaScript中) – Damian

回答

0

類似@ Fribu的答案,我使用one功能,而不是使用on現在implmented它:

$('img').one("load", function() { 
    window.setTimeout(function() { 
     loadImg() 
    }, 1000) 
}).attr("src", newSrc) 
0

試試這個:

$('img').attr("src", r1[0]).done(function(){ 
    window.setTimeout(function() { 
     loadImg() 
    }, 1000) 
}); 

OR

$('img').load(function() { 
     window.setTimeout(function() { 
      loadImg() 
     }, 1000) 
    }); 
+0

我試了兩個(在另一個答案中發現他們),但他們不工作。 –

1
$('img').on("load",...) 

應的伎倆。

新增:

<img /> 

    <div id="hi"></div> 
    <script src="https://code.jquery.com/jquery-3.1.1.js"></script> 
    <script> 

    $(document).ready(function() { 
     var i = 0; 
     var h = $("#hi"); 

     $("img")[0].onload = function() { 
     //alert("done"); 
     i++; 
     h.html(i); 
     } 


     $("img").attr("src", "http://cdn.sstatic.net/Sites/stackoverflow/img/sprites.svg?v=8c1c8cba242e") 
    }); 

    </script> 
+0

這太火了,我不知道爲什麼。嘗試使用'$('img')。on(「load」,function(){alert(「done」)})。attr(「src」,r1 [0])',其餘部分保持不變,打開第一次重新加載1個messagebox,第二次2,第三次3 .... ohhh,因爲我每次運行該方法時都會註冊另一個新的事件處理程序...給我一點時間:D –

+0

好吧,讓它工作有了這個。 +1。現在我會看看這個緩存圖像是否也有問題,如相關答案。 –

+0

@MarkusWeninger我添加了一個例子,不知何故它使用on(「load」)被多次調用,但是使用本地onload事件它可以正常工作。 –