【问题标题】:One div two functions in jqueryjquery中的一个div两个函数
【发布时间】:2015-04-04 10:52:55
【问题描述】:

我已经看遍了,但到目前为止什么都没有。我被卡住了。

我有一个 html 音频元素,我想用一个 div 来控制它。当我单击 div 时,它会播放音乐,但我需要的是当我再次单击它以停止播放但不知道如何播放时。

这是音频标签。

<audio class="audioplayer" preload="none" style="display: none;" >
   <source  src="audio/ocean.mp3" type="audio/mpeg">
</audio>

这是 jquery 用 div (#ocean) 控制游戏。

$('#ocean').click(function() {
          if ('.audioDemo'.paused == false) {
              $(".audioDemo").trigger('pause');
          } else {
              $(".audioDemo").trigger('play');
          }
        });

        function stopAudio(){
            $(".audioDemo").trigger('pause'); //pause playing
            $(".audioDemo").prop("currentTime",0); //set play time to 0
        }

我已经编写了停止函数并且它可以工作,但前提是我将它连接到另一个 div 上。我已经尝试过 .paused 但它不起作用。

如何使用与播放和停止相同的 div?

谢谢

【问题讨论】:

标签: javascript jquery html html5-audio


【解决方案1】:

字符串没有pause 属性,所以检查'.audioDemo'.pause 不起作用。您需要检查普通的 HTMLAudioElement 对象 pause 属性。

因此,在 jQuery 的帮助下,您选择 $(".audioDemo") jQuery 对象集合,然后您会从那里获得原始 HTML 元素作为该集合的第一个元素:

$('#ocean').click(function () {
    if ($(".audioDemo")[0].paused == false) {
        $(".audioDemo").trigger('pause');
    } else {
        $(".audioDemo").trigger('play');
    }
});

或者一点点优化的代码:

$('#ocean').click(function () {
    var $audioObj = $(".audioDemo");
    $audioObj.trigger(!$audioObj[0].paused ? 'pause' : 'play');
});

function stopAudio() {
    $(".audioDemo").trigger('pause').prop("currentTime", 0);
}

【讨论】:

  • 或者$audioObj.get(0)
【解决方案2】:

考虑以下代码:

$('#ocean').click(function () {
    if ($(".audioDemo").get(0).paused == false) {
        $(".audioDemo").trigger('pause');
    } else {
        $(".audioDemo").trigger('play');
    }
});

您可以在选择带有索引的元素时使用以下方法:

$("#element")[index]
$("#element").get(index)
$("#element").eq(index)

Demonstration

注意'.audioDemo'.pause 用于检查音频是否暂停是不正确的。意味着您无法访问音频 Object 像这样。如果你想这样做,请使用 $('element')


添加了停止功能:

$('#stop').click(function(){
    $(".audioDemo").trigger('pause'); //pause playing
    $(".audioDemo").prop("currentTime",0); //set play time to 0
});

Updated Demo

【讨论】:

  • .eq(index)的目的是通过索引选择一个元素,同时保留附加的jQuery方法,不能用来获取原生的audioelement。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2017-10-13
  • 2019-03-29
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
相关资源
最近更新 更多