切换播放/暂停按钮(多个音频)

Posted

技术标签:

【中文标题】切换播放/暂停按钮(多个音频)【英文标题】:Toggle play/pause button (Multiple audios) 【发布时间】:2017-08-16 07:18:35 【问题描述】:

我的页面上有多个音频,每个音频都有播放/暂停按钮。

        <?php if ( have_posts() ) : ?>

        <?php

        // the query
        $predigten_all_query = new WP_Query(array(
            'post_type'=>'predigten',
            'post_status'=>'publish',
            'posts_per_page'=>-1)); ?>

        <?php if ( $predigten_all_query->have_posts() ) : ?>

        <div class="content-box">
            <!-- the loop -->
            <?php while ( $predigten_all_query->have_posts() ) : $predigten_all_query->the_post(); ?>

            <?php
                // vars
                $mp3 = get_field('mp3');
                $mp3_url = $mp3['url'];
            ?>
            <div class="archive-content">
                <div class="play-wrap">
                    <audio src="<?php echo $mp3_url; ?>" id="music"></audio>
                    <i class="fa fa-play" id="play"></i>
                </div>
                <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3><br>
                <a href="<?php echo $mp3_url; ?>" class="mp3-btn" download>
                    <i class="fa fa-share-square-o"></i>
                </a>
            </div>

            <?php endwhile; ?>
            <!-- end of the loop -->
        </div>

这是我的脚本,它更改了图标的类别,以便它可以切换到“播放”或“暂停”图标。

jQuery(document).ready(function($) 
    $("#play").click(function() 
        var audio = document.getElementById('music');
        if (audio.paused) 
            audio.play();
            $('#play').removeClass('fa fa-play')
            $('#play').addClass('fa fa-pause')
         else 
            audio.pause();
            audio.currentTime = 0
            $('#play').removeClass('fa fa-pause')
            $('#play').addClass('fa fa-play')
        
    );
);

问题是这只适用于我的第一个音频按钮。我是否需要创建动态 ID,如果需要,如何正确处理?

非常感谢!

【问题讨论】:

【参考方案1】:

问题是因为您在 DOM 中有多个 #play#music 元素,而它们必须是唯一的。您可以通过在播放按钮上使用类来解决此问题,然后在单击处理程序中使用 DOM 遍历来查找相关的 audio 元素。试试这个:

<div class="play-wrap">
  <audio src="<?php echo $mp3_url; ?>" class="music"></audio>
  <i class="fa fa-play play"></i>
</div>
$(".play").click(function() 
  var audio = $(this).closest('.play-wrap').find('.music')[0];

  if (audio.paused) 
    audio.play();
   else 
    audio.pause();
    audio.currentTime = 0
  

  $(this).toggleClass('fa-play fa-pause');
);

还要注意使用toggleClass() 来简化播放状态之间的类更改。

【讨论】:

嗨,如果播放下一个音频,我们该怎么办当前音频将暂停 嗨,我们怎样才能获得 var audio 的长度? audio.length 未定义【参考方案2】:

html 更改 您可以为此使用数据属性。 将 id 动态设置为 aution id,并且该 id 也设置为 data-music_id

<div class="play-wrap">
<audio src="<?php echo $mp3_url; ?>" id="music1"></audio>
<i class="fa fa-play" id="play" data-music_id="music1"></i>
</div>

js 变化

获取 data-music_id 并传入 document.getElementById

jQuery(document).ready(function($) 
$("#play").click(function() 
var music_id = $(this).data('music_id');
    var audio = document.getElementById(music_id);
    if (audio.paused) 
        audio.play();
        $('#play').removeClass('fa fa-play')
        $('#play').addClass('fa fa-pause')
     else 
        audio.pause();
        audio.currentTime = 0
        $('#play').removeClass('fa fa-pause')
        $('#play').addClass('fa fa-play')
    
);
);

【讨论】:

请描述问题以及您所做的更改。转储代码不会教育任何人。您还使用 #music 元素创建了相同的重复 ID 问题。【参考方案3】:

如果您有多个播放和音频,您可以使用class="play" 而不是id="play"

play 上单击查找closest 音频并播放或暂停该音频。

<div class="play-wrap">
<audio src="<?php echo $mp3_url; ?>" class="music"></audio>
<i class="fa fa-play" class="play"></i>
</div>
<div class="play-wrap">
<audio src="<?php echo $mp3_url; ?>" class="music"></audio>
<i class="fa fa-play" class="play"></i>
</div>

JS变化

jQuery(document).ready(function($) 
    $(".play").click(function() 
        var audio = $(this).closest('.audio');
        if (audio.paused) 
            audio.play();
            $(this).removeClass('fa fa-play')
            $(this).addClass('fa fa-pause')
         else 
            audio.pause();
            audio.currentTime = 0
            $(this).removeClass('fa fa-pause')
            $(this).addClass('fa fa-play')
        
    );
);

【讨论】:

请描述问题以及您所做的更改。转储代码不会教育任何人。另请注意,jQuery 对象没有paused 属性或play()pause() 方法。

以上是关于切换播放/暂停按钮(多个音频)的主要内容,如果未能解决你的问题,请参考以下文章

在 HTML 音频播放器中切换播放/暂停按钮

如何一键切换音频播放/暂停

播放和暂停按钮正在工作...但是如何重置按钮以在音频结束后显示播放符号?

从数据库播放多个音频文件

切换播放/暂停以响应音频

是否可以使用按钮自动播放音频和播放/暂停?