HTML5 Audio 标签拒绝停止播放,即使被删除?

Posted

技术标签:

【中文标题】HTML5 Audio 标签拒绝停止播放,即使被删除?【英文标题】:HTML5 Audio tag refuses to stop playing, even after being removed? 【发布时间】:2014-02-28 16:23:31 【问题描述】:

所以我有这个音频标签:

<audio src=".....mp3" autoplay id="aud"></audio>

20 秒后,我触发了这段代码:

var obj=$('#aud')
obj[0].volume=0;
obj[0].pause();
obj.prop('volume',0);
obj.trigger('pause');
obj.attr('src','');
obj.remove();
console.log('REMOVED!!');

但在这一切之后,音频还在播放??

音频标签已被obj.remove()成功移除,但音频还在继续。

console.log() 正确记录。我没有错误。但是尽管使用了多种方法来静音、暂停和删除音频标签,但音频仍在继续。

谁能解释一下原因?

我需要用盐和火焰清除此音频。任何帮助将不胜感激,这让我慢慢发疯......

【问题讨论】:

我认为 html 是在报复您使用自动播放媒体 一旦有人点击“播放”按钮,音频标签就会被写入页面。老实说,我不应该受到报应! 应该可以...什么浏览器? jQuery 版本?也许是一个遇到问题的 jsfiddle? 我知道它应该可以工作,但我无法在 jsFiddle 中重新创建问题 - 这表明它是我的代码,但我需要了解是什么导致音频在播放后继续播放被移除。也许一个更好的问题应该是“在标签被告知静音、暂停和被删除后,音频如何继续播放”——有没有这种情况发生过?我正在检查 DOM,一旦删除,页面中的任何地方都没有其他音频标签。我正在使用 Firefox 28 和 Chrome 25。 您写道,您正在手动将音频标签附加到代码中。我相信即使在您将标签添加到 DOM 之前音频就会自动播放,这会弄乱一些东西(可能会开始播放 2 次?)。尝试在没有 autplay 属性的情况下将音频标签附加到您的 DOM 树,并在添加后简单地调用 play() 【参考方案1】:

所以我在写这个作为答案时摆弄了这个,我得出以下结论:

使用autoplay 属性手动创建audio 标记会导致它在被添加到DOM 树2 次之前播放(在较旧的jquery 实现上)。即使在将该元素添加到 DOM 树之后,通常也无法停止两个音频流 - 可能在播放第二个流时,其中一个流与元素断开连接。没有深入挖掘。我在这里重现了这个问题:

http://jsfiddle.net/2gaBs/3/

当您单击Create w/o autoplay 按钮时,您可以正常暂停它,但是当您单击Create autoplay 时,它会立即启动(甚至在添加到 DOM 树之前)2 次!您可能没有注意到第二次播放(我也没有),因为当 mp3 在同一台机器上时,两个音频流几乎完全同步。按Try stop 将停止其中一个音频流(您需要等待 5 秒,注意 setTimeout)。

另外请注意,如果您将 jQuery ver 切换到 1.8.3 或更高版本,则不再出现此问题,因此那天我们俩似乎都在使用旧的 jQuery 库^^

所以 2 个解决方案是:将 jquery 版本更新到 1.8.3 或更高版本,或者创建没有自动播放属性的元素并稍后启动它。

【讨论】:

以上是关于HTML5 Audio 标签拒绝停止播放,即使被删除?的主要内容,如果未能解决你的问题,请参考以下文章

[js开源组件开发]html5标签audio的样式更改

html5的video标签播放视频的时候如何设置停止播放

Android 上的 HTML5 <audio> 标签

HTML5 <audio>标签如何设置连续播放

html5 audio 标签autoplay="autoplay"在手机预览网页无法自动播放背景音乐

HTML5中audio标签的使用