javascript - 使用 jQuery 在 Mousedown/up 上播放/暂停音频

标签 javascript jquery html5-audio

我正在尝试使用 jQuery 动态地将监听器分配给 anchor ,以便在 mousedown 时播放声音并在 mouseup 时暂停。这是我的 html:

<p>Meet 
  <a class="easter-egg">Buck
    <audio class="egg-aud" src="file.mp3">
      <source src="file.ogg" />
    </audio>
    <img class="egg-img" alt="" src="file.jpg" />
  </a>.
</p>

还有我的js:

$( "a.easter-egg" ).mousedown( function() {
  $( this ).find( "audio.egg-aud" )[0].play();
});

$( "a.easter-egg" ).mouseup( function() {
  var audio = $( this ).find( "audio.egg-aud" )[0];
  audio.pause();
  audio.currentTime = 0;
});

编辑:在 jsfiddle 中,我的代码工作得很好,直到我将 <p> 包装在 <div class="entry-content"> 中,此时它中断了。我将我的网站示例粘贴到 jsfiddle 中,您可以尝试删除该 div 并查看它是否可以在没有它的情况下正常工作。

最佳答案

问题:

您试图设置 currentTime动态附加的音频标签。因此,您必须等待音频标签准备好播放。

解决方案:

使用 canplay 检查音频元素是否准备好播放事件。

// When the audio element "can"be"play"ed, fire the function.
audio.addEventListener("canplay", function() {
   this.currentTime = 0;        
},true);

评论:

  1. 之前,您在控制台中遇到的错误是: “错误:尝试使用不可用或不再可用的对象。” 请继续检查错误,它们非常有用:)
  2. 同样的情况也适用于 <video>动态附加的标签。

Live Demo

希望有帮助!

关于javascript - 使用 jQuery 在 Mousedown/up 上播放/暂停音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22058786/

相关文章:

javascript - 隐藏所有不具有与所选元素匹配的类的元素

jquery - 在没有document.ready()的情况下运行jQuery并崩溃,即8

html - Windows Phone 7 和 HTML5

javascript - Django 中的 Jquery 帖子

javascript - 如何序列化对象数组以形成 Angular 字段

javascript - 在 asp.net mvc 中获取客户端机器时区

jquery - 使用 jquery 的 cshtml 中的电子邮件验证正则表达式弹出错误

html - 一些 mp 3's won' t 在 html5 音频播放器中播放

html - 带预处理的流式 MP3

javascript - 隐藏 SVG 元素需要很多时间