2017-02-15 60 views
0

我有以下代碼:停止音頻循環的Javascript

var player = document.createElement('audio'); 
player.src = 'https://dl.dropbox.com/u/7079101/coin.mp3'; 
player.preload = 'auto'; 

    var url= 'http://www.businessdictionary.com/definition/update.html'; 

window.setInterval(function(){ 
    if($("*:contains(Update')").length > 0){ 
    console.log('New Update, playing sound...'); 
    player.play(); 
    } 
}, 5000); 

學分:勞倫斯·斯沃特

代碼的偉大工程,但是,音頻循環,直到永遠。有沒有辦法讓音頻播放一次?

+0

使用'的setTimeout()',而不是'的setInterval ' – azs06

+0

通過幫助您,我的託管國家當局可能會遇到一些問題,因此這將保留爲註釋,但是如果目標是檢查何時其中具有「Update」的元素已添加到文檔中,並且在這個時候播放聲音,然後你沒有知道'setInterval'確實返回一個id,它與['clearInterval'](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval)方法一起使用,當你的支票經過。如果您正在等待多個此類事件,則在每次新的積極事件中將'> 0'更改爲'> current'並增加'current'。 – Kaiido

+0

@Kim Jong-un一旦你指出了這個...如果你這樣做...發佈一個答案,以幫助下一個人...歡迎來到SO –

回答

0

您正在使用window.setInterval這將重複對player.play()的呼叫,直到您致電clearInterval()

如果你想玩家只玩一次,我建議你用window.setTimeout來代替。

var player = document.createElement('audio'); 
player.src = 'https://dl.dropbox.com/u/7079101/coin.mp3'; 
player.preload = 'auto'; 

    var url= 'http://www.businessdictionary.com/definition/update.html'; 

window.setTimeout(function(){ 
    if($("*:contains(Update')").length > 0){ 
    console.log('New Update, playing sound...'); 
    player.play(); 
    } 
}, 5000); 
+0

這是一個很好的解決方案,但是,當一個新的更新出現在網站上,腳本不會再凍結音頻,因爲它已經播放過了。我認爲我需要的是一個傾聽者。謝謝你的幫助。 –

0

您需要刪除你的setInterval來播放音頻一次 和音頻迴路屬性添加到假

試試這個:

var player = document.createElement('audio'); 
player.src = 'https://dl.dropbox.com/u/7079101/coin.mp3'; 
player.preload = 'auto'; 
player.loop = false; 
var url = 'http://www.businessdictionary.com/definition/update.html'; 

// window.setInterval(function() { 
     if ($("*:contains(Update')").length > 0) { 
      console.log('New Update, playing sound...'); 
      player.play(); 
     } 
// }, 5000); 
+0

我做了,但不幸的是它沒有工作。無論如何。 –

+0

如果我評論那些行腳本不執行。 –