【问题标题】:Dynamically control HTML5 audio with JavaScript使用 JavaScript 动态控制 HTML5 音频
【发布时间】:2011-08-07 13:34:35
【问题描述】:

我有一个包含大约 10 个缩略图的画廊,每个缩略图代表一首歌曲。为了控制每个播放,我设置了一个播放按钮以通过 jQuery 淡入。在对 Apple 的开发中心进行了一番挖掘之后,我发现了一些用于控制音频的原生 JavaScript。它工作得很好,但是是为一次控制一个对象而编写的。我想做的是将它重写为一个动态控制您选择的缩略图的播放/暂停的函数。

下面是我找到的代码..可以,但是写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>

【问题讨论】:

    标签: javascript jquery html audio playback


    【解决方案1】:

    jQuery 非常适合这种事情。它使您能够根据元素与 DOM 树中其他元素的关系轻松操作元素。在您的示例中,您希望能够使 &lt;a&gt; 元素在单击时仅影响它们旁边的 &lt;audio&gt; 元素。

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

    以下是更改代码以支持无限数量的&lt;a&gt; &amp; &lt;audio&gt; 对的方法。

    1. 将类添加到&lt;a&gt; 标签(在我的示例中为“播放”)
    2. 将 href 属性替换为“#”
    3. 然后使用 jQuery 将处理程序附加到具有该类的元素的单击事件。

    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>
    

    【讨论】:

    • @jessegavin 感谢您的彻底回答。感谢您花时间解释 jQuery 在此应用程序中的优势。我在我的页面中实现了您的代码,但它没有播放音频文件。有什么想法吗?它对你有用吗?
    • 页面中的 html 是否与示例中的 html 完全相同?音频标签是否在每种情况下都跟随链接标签? - 您是否收到任何特定的 javascript 错误?
    • @jessegavin HTML 被完全复制,是的,音频标签在每种情况下都遵循一个链接(支持.next)。没有具体错误,只是没有音频。这是一个 jsFiddle 来演示:jsfiddle.net/66FwR
    • 我在里面多了一个}。我已经更新了上面的答案。现在可以了。我还更新了您的 jsFiddle,以便您可以看到它的实际效果:jsfiddle.net/66FwR/1
    • @Jessegavin 完美!语法很可能是我的死亡。我需要在锚标签中包含 href 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多