2013-06-29 48 views
0

首先,我想你生病展示一下我到目前为止....多个HTML5音频行为:一个轨道中的时候请

http://jsfiddle.net/fDRnY/

我在我的HTML结构多<audio>标签。即时通讯使用的标准技术与<a>标签

$('.play').on('click',function(e){ 
e.preventDefault(); 

var song = $(this).next('audio').get(0); 

    if(song.paused){ 
     song.play(); 

    }else { 
     song.pause();  
    } 
}); 

接下来,我写了一个简单功能的发挥以下轨道时当前播放曲目结束播放的文件...

$('audio').on('ended',function(e){ 
e.preventDefault(); 
var $next = $(this).nextAll().eq(1).get(0); 

     if($next.paused){ 
      $next.play(); 
     } 
}); 

再就是对于视觉UI添加一个亮点类当前播放的曲目多了一些功能...

$('audio').on('playing',function(){ 
    $(this).prev().addClass('highlight') 
}); 

$('audio').on('ended',function(){ 
    $(this).prev().removeClass('highlight') 
}); 

$('audio').on('pause',function(){ 
    $(this).prev().removeClass('highlight') 
}); 

现在我的问题:如果你点击一个以上的轨道,他们将同时播放。我想要当前播放的任何曲目在您点击另一曲目时暂停。

我发现对堆栈类似的担忧类似的帖子,我发现这个功能,遍历所有audio对象,并暂停他们...

var allAudioEls = $('audio'); 

function pauseAllAudio() { 
    allAudioEls.each(function() { 
     var a = $(this).get(0); 
     a.pause(); 
    }); 
} 

如果我这样调用的函数(下面3行)...

$('.play').on('click',function(e){ 
e.preventDefault(); 
pauseAllAudio();   
var song = $(this).next('audio').get(0); 

    if(song.paused){ 
     song.play(); 

    }else { 
     song.pause();  
    } 
}); 

它几乎工程,将暂停正在播放的另一条轨道,并播放一个最近点击的,但是现在你不能暂停当前播放了轨道,多数民​​众赞成。我希望这是有道理的。林肯定它的某种流量问题,但我是一个初学者...也许我需要一个全新的技术来做到这一点。我认为我在循环通过audio对象的正确轨道...任何帮助将不胜感激,并像我说我是一个新手。任何详细的解释将更加赞赏。

谢谢!

+0

需要花费的极少量的时间。我自学成才,我爱Stack作为资源。如果你觉得你应该投下这个问题,请告诉我为什么。我真的很想学习jQuery。 – BryanK

回答

1

参数添加到您的pauseAllAudio功能,排除特定元素:

function pauseAllAudio(exclude) { 
    allAudioEls.each(function() { 
     var a = $(this).get(0); 
     if(a !== exclude) { 
      a.pause(); 
     } 
    } 
} 

再经过songpauseAllAudio

var song = $(this).next('audio').get(0); 
pauseAllAudio(song); 

如果您并不需要在此播放这首歌曲代码块,您只需将支票下方的pauseAllAudio()调出即可。然而,这样做会让它无法比赛的时间超过从song.play()pauseAllAudio()

+0

这工作正如我想要的!非常感谢!我不得不承认,我并不完全理解排除参数的情况......如果你能告诉我要研究哪些概念以更好地理解id,那么使用这种方法会更好。再次,非常感谢。谢谢。 – BryanK

+0

'exclude'参数是指向特定DOM对象的[reference](http://en.wikipedia.org/wiki/Reference_(computer_science))(认为是内存地址或C/C++指针),变量'了'。 if语句检查引用是否相等。如果它们是,那么它们是同一个DOM对象,我们将它排除在暂停状态之外。 –

相关问题