2016-08-11 36 views
1

我有一個音頻文件陣列,只要點擊一個按鈕就可以播放。如果我點擊所述按鈕,它將播放陣列中的下一個音頻文件。此外,如果當用戶再次單擊時正在播放音頻,則會重置當前曲目並播放下一首歌曲。通過音頻文件陣列播放onclick

試圖找出爲什麼我無法循環通過我目前擁有的數組。

var song1 = $("#sound-1"); 
var song2 = $("#sound-2"); 
var song3 = $("#sound-3"); 
var song4 = $("#sound-4"); 
var song5 = $("#sound-5"); 
var song6 = $("#sound-6"); 
var song7 = $("#sound-7"); 
var song8 = $("#sound-8"); 

var audioArray = [ song1, song2, song3, song4, song5, song6, song7, song8 ]; 


$(".click").click(function(){ 
    var i=0; 
     if (i< audioArray.length){ 
     audioArray[i].trigger('play'); 
     i++; 
     } else if (i>audioArray.length){ 
     i = 0; 
     audioArray[i].trigger('play'); 
     }; 
}); 

回答

0

更新答案:

由於您使用的是原生的HTML5接口,還有一個pause事件也可被觸發。不幸的是,沒有stop事件會重置時間,但我們可以使用currentTime屬性手動將其設置爲0

var i=0; 
var lastPlayedFile = null; 
$(".click").click(function(){ 
    if(lastPlayedFile !== null) { 
    lastPlayedFile[0].currentTime = 0; // [0] because we need a native DOM element, not a jQuery-wrapped one 
    lastPlayedFile.trigger('pause'); 
    } 
    if (i< audioArray.length){ 
    lastPlayedFile = audioArray[i]; 
    audioArray[i].trigger('play'); 
    i++; 
    } else if (i>=audioArray.length){ // there was a missing '=' in this condition to work properly 
    i = 0; 
    lastPlayedFile = audioArray[0]; 
    audioArray[i].trigger('play'); 
    }; 
}); 

原始答案:click處理程序之外的i

移動聲明。

var i=0; 
$(".click").click(function(){ 
    if (i< audioArray.length){ 
    audioArray[i].trigger('play'); 
    i++; 
    } else if (i>audioArray.length){ 
    i = 0; 
    audioArray[i].trigger('play'); 
    }; 
}); 

你被重置它的每次用戶點擊該按鈕值設置爲0。

+0

很酷,是的,我知道迭代已關閉,但無法看到它到底是什麼。謝謝!但是,如何才能停止當前正在播放的音頻文件,以便只播放一個音頻文件?每次我點擊它時,都會不停地播放新的音頻文件,並重置前一個音頻文件。 –

+0

@PeterLum,我已經更新了答案,請查看 –

+0

感謝您的幫助。我目前只是利用html5原生音頻與jQuery的DOM操作。當每次點擊觸發數組中的下一首歌曲時,迭代工作,但是歌曲不會按預期停止和重置。控制檯似乎沒有注意到任何錯誤,所以我很好奇,如果有另一種方法來停止音頻並將其重置,以便下一首歌曲獨自播放,而不是像現在這樣重疊音頻。 –