Javascript 区分HTML5中的音频启动和音频播放(暂停后)

Javascript 区分HTML5中的音频启动和音频播放(暂停后),javascript,jquery,html,html5-video,html5-audio,Javascript,Jquery,Html,Html5 Video,Html5 Audio,如何在音频/视频开始时添加侦听器 我可以这样做: $audio.on("play", function() { console.log("audio played"); }); 其中$audio是一个jQuery对象,表示单个DOM audio元素 但当我们恢复视频时,它也会运行。我希望它只在开始时运行 我可以这样做的一个方法是: $audio.on("play", function() { if(this.currentTime === 0) { console.lo

如何在音频/视频开始时添加侦听器

我可以这样做:

$audio.on("play", function() {
    console.log("audio played");
});
其中$audio是一个jQuery对象,表示单个DOM audio元素

但当我们恢复视频时,它也会运行。我希望它只在开始时运行

我可以这样做的一个方法是:

$audio.on("play", function() {
  if(this.currentTime === 0) {
      console.log("audio started);
  }
});
但当我们在开始播放/暂停音频时,这将运行多次

有没有更好的办法?侦听器应仅在音频开始和音频重播时工作,而不是在用户手动将搜索栏拖到源的开始时工作。

将标志存储到目标元素的data-*属性中:

常量$audio=$'.audio'; $audio.onplay,函数{ if$this.data'once-play'返回;//如果数据存在,则不执行任何操作。 //你的代码在这里 console.logAudio首次启动; //最后,添加一个标志。 $this.data“一次播放”,正确; };
实际上,这听起来可能有点混乱,因为我的印象是,如果我们在几秒钟内完成,currentTime可能仍然返回0。但在阅读了@freedomn-m、@roko-c-buljan、@rory mccrossan的评论后,我发现当我们立即播放暂停视频时,currentTime永远不可能返回0

现在,让我们假设我想跟踪一个用户观看视频的次数。这些要求听起来可能很奇怪,但我所说的观看只是指开始/重播。如果用户手动将搜索栏拖到源的开头,则不算

以下是我最终如何使用您的所有观点实现它:

const $audio = $('.audio');
$audio.on("play", function() {

  if ($(this).data('once-played')) return; // Do nothing if data exists.

  // Your code here
  console.log("Audio started/replayed");

  // Finally, add a flag.
  $(this).data('once-played', true);
});

$audio.on("ended", function() {
  $(this).data('once-played', false);
});

var start=false;-剩下的留给你去弄清楚使用currentTime的方法是否有效:我不确定问题出在哪里。您是否只想触发一次“启动”事件,即使用户手动将音频跟踪回源的开头?@freedomn-m我可以在同一页面上有n个播放器。所以,我不想维护这些变量。@Rorymcrossan是的,它工作正常。我只是假设用户在一秒钟内多次单击播放/暂停。所以,我一直在寻找一种只有在媒体开始播放而不是播放时才起作用的东西。@ankur_rajput,拜托-你的问题。试着理智地弄清楚你真正想要什么。目前看来你完全糊涂了。@ankur_rajput正是。Console.log将只记录一次,无论您播放/回放视频多少次,除非您清楚地刷新页面-这完全是基于您的问题:但它也将在恢复视频时运行。我希望它仅在start YYES上运行,但我希望它在每次启动/重放视频时都能正常工作。@ankur_rajput OK,而不是ifthis.currentTime==0中的错误{??您在问题中说过,但当我们在开始播放/暂停视频时,这会运行多次-因此,我的答案是它现在的样子。那么,检查currentTime==0到底不起什么作用?开始然后立即暂停使currentTime仍然=0,这有可能吗?以及开始,watching一点,倒带,然后重新开始?确切地说,你想什么时候发射,什么时候不想发射?你的问题和评论非常混乱。在暂停时添加一个额外的检查-如果currentTime!=0,那么$this。数据“一次播放”,false;可能一次播放就倒带,以匹配此,但概念是相同的,但如果结束,你重置数据为false-这同样与您在编辑的问题中所述的内容无关。侦听器应该只处理音频开始和音频重放,而不是当用户手动将搜索栏拖到源的开始时-侦听器到什么?仍然很难理解您要的是什么,但是$audio.oneded函数{不支持问题文本。有时解释你正在构建什么以及请求是什么比用零碎的东西开始一个问题更有帮助。|请阅读: