为啥我的 HTML5 音频不会循环播放?

Posted

技术标签:

【中文标题】为啥我的 HTML5 音频不会循环播放?【英文标题】:Why won't my HTML5 audio loop?为什么我的 HTML5 音频不会循环播放? 【发布时间】:2011-10-12 22:54:33 【问题描述】:

在撰写本文时,该网站位于:http://ajf.me/stuff/eva。源代码是这样的:

<!DOCTYPE html>
<html style="height: 100%;">
<head>
<title>eva</title>
</head>
<body style="background-color: black; background-image: url('eva.png'); background-repeat: no-repeat; background-position: center center; height: 100%; margin: 0px; padding: 0px;">
<audio autoplay loop>
    <source src="eva.mp3" type="audio/mpeg" />
    <source src="eva.ogg" type="audio/ogg" />
    <source src="eva.wav" type="audio/wav" />
</audio>
</body>
</html>

音频在 Chrome、IE9 和 Firefox 中播放良好,但在后者中不循环播放。音频文件不能畸形,因为它是由 Audacity 制作的。为什么它不循环还有其他解释吗?

【问题讨论】:

自动关闭标签和 autoplay="autoplay" loop="loop" doubled-Boolean-attribute business 只需要 XHTML,如果我没记错的话。 &lt;audio autoplay loop&gt; 应该是有效的 HTML5。不过,这几乎肯定与你的问题没有任何关系。 你用 尝试 id 只是为了测试? 试过了,同样的问题,没有循环。 在 Firebug 中,document.body.children[0].loopundefined,而 document.body.children[0].autoplaytrue,神秘地 【参考方案1】:

你可以这样做

&lt;audio autoplay loop&gt;

属性不需要有其他任何东西。


编辑

据此,Firefox 不喜欢loop。它提出了一个js解决方案:

document.getElementById('audio_2').addEventListener('ended', function()
    this.currentTime = 0;
, false);

http://forestmist.org/2010/04/html5-audio-loops/


编辑

HTML5 音频循环现在可以与 firefox 一起使用。在 26.0 版本中确认(可能更早)

【讨论】:

我遇到了和 OP 一样的问题,同时使用了循环属性和事件监听器,现在可以在 FF、IE 和 Chrome 中使用。【参考方案2】:

Firefox 还没有实现循环。我会检查您是否拥有最新版本的 Firefox,但我相信情况仍然如此。您可以检查它是否支持:

if (typeof new Audio().loop == 'boolean')

如果计算结果为 true,则在浏览器中实现循环。如果为假,则不是。将其添加到您的 javascript,在您的音频上放置一个 id 标记并使用该 if 语句检查循环。

if !(typeof new Audio().loop == 'boolean') 
    audioToLoop = document.getElementById('audio_id_here');
    audioToLoop.addEventListener('ended', function () 
        this.currentTime = 0;
        this.play();
    , false);

即使在不受支持的浏览器中,它也应该循环播放。

【讨论】:

以上是关于为啥我的 HTML5 音频不会循环播放?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的音频功能一直循环而不是一直运行?

HTML5 视频不会在 Android 设备上循环播放

HTML5 AUDIO 不断循环不同的来源

HTML5 音频循环

Html5之高级-5 HTML5音频处理(在H5中播放音频编程实现音频播放器)

当通过 JavaScript 填充源时,Html5 音频不会在 Safari 中播放