2011-04-18 74 views
9

我有一个有10个左右缩略图的画廊,每个画面都代表一首歌曲。为了控制每个播放,我设置了一个播放按钮,通过jQuery淡入。经过对苹果开发中心的挖掘后,我发现了一些原生JavaScript来控制音频。它的工作原理非常漂亮,但是一次只能编写一个控件。我想要做的就是将它重写为一个可以动态控制所选缩略图播放/暂停的功能。使用JavaScript动态控制HTML5音频

下面是我找到的代码..工作,但它会是很多不必要的代码写它10次。

感谢您的帮助和建议,永远!

HTML:

<div class="thumbnail" id="paparazzixxx"> 
     <a href="javascript:playPause();"> 
      <img id="play" src="../images/icons/35.png" /> 
     </a> 
     <audio id="paparazzi"> 
      <source src="../audio/fernando_garibay_paparazzisnlmix.ogg" type="audio/ogg" /> 
      <source src="../audio/fernando_garibay_paparazzisnlmix.mp3" type="audio/mpeg" /> 
      Your browser does not support HTML5 audio. 
     </audio> 
    </div> 

的JavaScript:

<script type="text/javascript"> 
     function playPause() { 
     var song = document.getElementsByTagName('audio')[0]; 
     if (song.paused) 
      song.play(); 
     else 
      song.pause(); 
     } 
</script> 

回答

22

jQuery是真棒对于这样的事情。它使您能够轻松地根据元素与DOM树中其他元素的关系来操作元素。在您的示例中,您希望能够使<a>元素仅在点击时影响旁边的<audio>元素。

您当前使用的Javascript代码存在的问题是,它实际上只抓取整个页面上的第一个音频元素。

下面介绍如何更改代码以支持无限数量的<a> & <audio>对。

  1. (在我的例子“回放”)一类添加到<a>标签
  2. 以“#”
  3. 然后使用jQuery处理程序附加到点击事件的元素替换href属性那个班。

HTML

<div class="thumbnail" id="paparazzixxx"> 
    <a class="playback" href="#"> 
     <img id="play" src="../images/icons/35.png" /> 
    </a> 
    <audio id="paparazzi"> 
     <source src="../audio/fernando_garibay_paparazzisnlmix.ogg" type="audio/ogg" /> 
     <source src="../audio/fernando_garibay_paparazzisnlmix.mp3" type="audio/mpeg" /> 
     Your browser does not support HTML5 audio. 
    </audio> 
</div> 

的Javascript

<script type="text/javascript"> 
    $(function() { 
    $(".playback").click(function(e) { 
     e.preventDefault(); 

     // This next line will get the audio element 
     // that is adjacent to the link that was clicked. 
     var song = $(this).next('audio').get(0); 
     if (song.paused) 
     song.play(); 
     else 
     song.pause(); 
    }); 
    }); 
</script> 
+0

@jessegavin谢谢你的彻底解答。我很感谢你在解释jQuery在这个应用程序中的优势。我将你的代码实现到了我的页面中,但它不会播放音频文件。有什么想法吗?对你起作用吗? – technopeasant 2011-04-18 04:37:01

+0

您的页面中的html与您示例中的html完全相同吗?每个音频标签在每种情况下都遵循链接标签吗? - 你有没有得到任何特定的JavaScript错误? – jessegavin 2011-04-18 08:36:13

+0

@jessegavin HTML被完全复制,是的,音频标签在每种情况下都支持链接(支持.next)。没有具体的错误,只是没有音频。这是一个jsFiddle来演示:http://jsfiddle.net/66FwR/ – technopeasant 2011-04-18 19:22:43