【问题标题】:How to have multiple instances of one jQuery player object in a page (Audio object)如何在页面中拥有一个 jQuery 播放器对象的多个实例(音频对象)
【发布时间】:2016-01-27 18:55:01
【问题描述】:

我做了一个自定义的音频播放器,但问题是我在每个 HTML 页面中只能有一个播放器。因为是这样,因为 js 代码与例如 .play 类相关联,那么如果页面上有 2 个 .play 类,则两者都可以工作。而唯一被按下的应该可以工作。这是播放器的一个非常简化的版本。我知道这个例子可以通过在代码的某些部分使用this 来解决,但想象一下它是一个具有很多功能的完整插件。

(function($) {
  var audio, src;
  src = $(".player").attr("data-src");
  audio = new Audio();
  audio.src = src;

  $(".play").on("click", function() {
    if (audio.paused) {
      audio.play();
      $(".play").css("background", "url(https://goo.gl/w4q23U) no-repeat");
    } else {
      audio.pause();
      $(".play").css("background", "url(https://goo.gl/xOkUZm) no-repeat");
    }
  });

})(jQuery);
div.player{
  width:200px;
  height:50px;
  border:dashed 1px black;
  margin:5px;
}
div.player > .play {
  width: 48px;
  height: 48px;
  background: url(https://goo.gl/xOkUZm) no-repeat;
  float:left;
}
div.player > .title{
  line-height:50px;
  margin-left:60px;
} 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="player" data-src="https://goo.gl/aBJE48">
  <div class="play"></div>
  <div class="title">track 1</div>
</div>

<div class="player" data-src="https://goo.gl/4arvDT">
  <div class="play"></div>
  <div class="title">track 2</div>
</div>

如您所见,如果您按下按钮进行播放,两个图标都可以使用,而只有按下的那个应该可以使用。我正在寻找一个合适的解决方案,以便在单个页面中包含同一插件的各种实例。

这个标题有类似的问题,但是这个问题的重点是考虑页面只能播放其中一个的音频对象,无论是否有多个播放器的一个实例。

【问题讨论】:

    标签: javascript jquery html javascript-objects


    【解决方案1】:

    为您的 CSS 传递一个“目标”,并将每个实例推送到一个数组中,以便您可以使用索引位置调用它们的方法。然后控件将应用于您选择的实例。

    (function($) {
      var player = [];
      var audio, src;
      src = $(".player").attr("data-src");
      audio = new Audio();
      audio.src = src;
      player.push(audio);
      $(".play").on("click", function(target) {
         $.each( player, function( key, value ) {
          if (audio[key].paused() {
          audio[key].play();
          $(target).css("background", "url(https://goo.gl/w4q23U) no-repeat");
        } else {
          audio[key].pause();
          $(target).css("background", "url(https://goo.gl/xOkUZm) no-repeat");
        }
    
      });
    
      });
    
    })(jQuery);
    

    【讨论】:

    • 感谢您的帖子,我不确定您为 CSS 传递 target 是什么意思。你能告诉我怎么做吗?
    • "target" 只是您传递的代表您单击的当前对象的引用。我已经更新了你的脚本以包含一个目标和必要的数组,以及你需要的循环。
    • 无论如何我都无法让它运行,好像audio[key].paused有错误
    • 是的,我的错误 - 我忘记了暂停函数调用的左括号。我已经在上面的代码中修复了它。不应再次抛出错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多