我最近一直在玩HTML5音频,虽然我可以让它播放声音,但它只会播放一次。无论我如何尝试(设置属性、事件处理程序等),似乎都不能让它循环。
下面是我使用的基本代码:
//myAudio is declared at a global scope, so it doesn't get garbage collected.
myAudio = new Audio('someSound.ogg');
myAudio.loop = true;
myAudio.play();
我正在使用Chrome (6.0.466.0 dev)和Firefox (4beta 1)进行测试,它们似乎都很乐意忽略我的循环请求。有什么想法吗?
循环更新:在所有主流浏览器中,循环属性现在都是supported。
发布于 2011-06-23 18:54:12
结合@kingjeffrey和@CMS的建议添加更多建议:你可以在可用的地方使用loop
,在没有的时候使用kingjeffrey的事件处理程序。你有一个很好的理由使用loop
,而不是编写自己的事件处理程序:正如Mozilla bug report中所讨论的,虽然loop
目前在我所知的任何浏览器中都不能无缝循环(没有间隙),但它肯定是可能的,并且很可能在未来成为标准。您自己的事件处理程序在任何浏览器中都不会是无缝的(因为它必须遍历JavaScript事件循环)。因此,最好尽可能使用loop
,而不是编写自己的事件。正如CMS在对Anurag的回答的评论中指出的那样,你可以通过查询loop
变量来检测对loop
的支持--如果它被支持,它将是一个布尔值(false),否则它将是未定义的,就像它目前在火狐中一样。
把这些放在一起:
myAudio = new Audio('someSound.ogg');
if (typeof myAudio.loop == 'boolean')
{
myAudio.loop = true;
}
else
{
myAudio.addEventListener('ended', function() {
this.currentTime = 0;
this.play();
}, false);
}
myAudio.play();
发布于 2010-07-18 06:53:56
你的代码可以在Chrome (5.0.375)和Safari (5.0)上运行。不会在Firefox (3.6)上循环。
var song = new Audio("file");
song.loop = true;
document.body.appendChild(song);
发布于 2018-03-30 00:04:01
最简单的方法是:
bgSound = new Audio("sounds/background.mp3");
bgSound.loop = true;
bgSound.play();
https://stackoverflow.com/questions/3273552
复制相似问题