2016-08-11 34 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操作。当每次点击触发数组中的下一首歌曲时,迭代工作,但是歌曲不会按预期停止和重置。控制台似乎没有注意到任何错误,所以我很好奇,如果有另一种方法来停止音频并将其重置,以便下一首歌曲独自播放,而不是像现在这样重叠音频。 –