2012-09-04 97 views
0

我有一個JavaScript函數,我在其中播放聲音文件(使用phonegap)。它通常工作正常,但我想在下載文件時將img src更改爲加載圖標。但是,播放文件後,src被更改爲 。源變化後的jquery刷新圖像

我試圖將+new Date().getTime()添加到src的末尾,但它沒有幫助。有什麼想法嗎?

function playSound(){ 


var img = $(this).prev(); 

img.attr("src", "css/images/ajax-loader.gif?"+new Date().getTime()); 


var url = "http://some.com/fanky.mp3"; 
mediaTTS = new Media(url, onSuccessTTS(url), onErrorTTS); 
mediaTTS.play(); 

} 
+0

再次添加的延遲可能是一個預載的問題。 [通過javascript預載圖片的Google搜索](https://www.google.se/search?q=preload+images+javascript&aq=f&sugexp=chrome,mod=5&sourceid=chrome&ie=UTF-8)。首先嚐試,如果它仍然存在,我們繼續前進。 :) –

回答

0

這可能是由於這樣的事實,直到當前運行循環結束時才重新繪製圖像。如果Media.play()被阻擋,則在完成播放之前可能看不到圖像更改。

爲了證實我的懷疑,請嘗試以下代碼:

function playSound(){ 
    var img = $(this).prev(); 
    img.attr("src", "css/images/ajax-loader.gif?"+new Date().getTime()); 
    setTimeout(function() { 
     var url = "http://some.com/fanky.mp3"; 
     mediaTTS = new Media(url, onSuccessTTS(url), onErrorTTS); 
     mediaTTS.play(); 
    }, 100); 
} 
+0

謝謝,這是問題所在。使用您的代碼,它會更新代碼並顯示加載動畫,但是它會阻止動畫一段時間。但它總比沒有好。 – noway

+0

是的,它看起來像你的媒體元素阻塞主線程。你應該看看文檔,看看是否有辦法讓它預加載異步。 –

0

嘗試刪除src屬性,然後用不同的SRC

function playSound(){ 
    var img = $(this).prev(); 
    img.removeAttr("src").attr("src","css/images/ajax-loader.gif?"+new Date().getTime()); 
    var url = "http://some.com/fanky.mp3"; 
    mediaTTS = new Media(url, onSuccessTTS(url), onErrorTTS); 
    mediaTTS.play(); 
}