2013-04-18 112 views
2

我在我的网站上设置了一些HTML音频,几秒钟后我已经设置了自动播放功能,但声音似乎加载了两次?一个开始直接玩另一个,尽管一个是鬼,并且看不到一个玩家。Javascript HTML5音频 - 如果已经播放,不要播放声音?

我怎么能告诉javascript不开始播放声音,如果已经有声音播放?

<audio controls="controls" onloadeddata="var audioPlayer = this; setTimeout(function() { audioPlayer.play(); }, 2000)" }> 
    <source src="http://www.alanis50.com/Music/music.mp3" type="audio/mp3"/> 
    <source src="http://www.alanis50.com/Music/music.ogg" type="audio/ogg"/> 
</audio> 

上述问题已经但是解决了我想添加一个Flash后备此音频的Internet Explorer等补充说:

<div id ="audio"> 

<script>var readingMusic = false; </script> 
<audio controls="controls" loop="loop" onloadeddata="var audioPlayer = this; if (!readingMusic){readingMusic = true;setTimeout(function() { audioPlayer.play(); }, 2000)}" }> 
    <source src="http://www.alanis50.com/Music/music.mp3" type="audio/mp3"/> 
    <source src="http://www.alanis50.com/Music/music.ogg" type="audio/ogg"/> 
    <embed type="application/x-shockwave-flash" flashvars="audioUrl=http://www.alanis50.com/Music/music.mp3&autoPlay=true" src="http://www.google.com/reader/ui/3523697345-audio-player.swf" width="400" height="27" quality="best" wmode="transparent"></embed> 
</audio> 
</div> 

<div id="audiohide"> 
<audio controls="controls" loop="loop" onloadeddata="var audioPlayer = this; if (!readingMusic){readingMusic = true;setTimeout(function() { audioPlayer.play(); }, 2000)}" }> 
    <source src="http://www.alanis50.com/Music/music.mp3" type="audio/mp3"/> 
    <source src="http://www.alanis50.com/Music/music.ogg" type="audio/ogg"/> 
    <embed type="application/x-shockwave-flash" flashvars="audioUrl=http://www.alanis50.com/Music/music.mp3&autoPlay=true" src="http://www.google.com/reader/ui/3523697345-audio-player.swf" width="400" height="27" quality="best" wmode="transparent"></embed> 
</audio> 

</div> 

但现在闪存音频表现如何以前的音频做显然JavaScript不影响Flash的嵌入?

+1

您在哪个浏览器中发出此问题?这个音频标签是您网页上唯一的自动播放功能吗? – icanhazbroccoli

+0

有趣的是,我测试过的所有浏览器Firefox/chrome/IE我不确定是否有更深层次的问题,例如,脚本在某处加载两次等等。但我想知道如果我可以设置一个音频函数,如果它已经在播放,就不开始播放了?我不介意承认我是JavaScript的新手! :( – user2287658

+2

你能创建一个[jsfiddle](http://jsfiddle.net/)这个问题吗? – Jashwant

回答

1

你不能有一个布尔值告诉浏览器是否已经有一些音乐播放?

例2个标签:

<script>var readingMusic = false; </script> 
<audio controls="controls" onloadeddata="var audioPlayer = this; if (!readingMusic){readingMusic = true;setTimeout(function() { audioPlayer.play(); }, 2000)}" }> 
    <source src="http://www.alanis50.com/Music/music.mp3" type="audio/mp3"/> 
    <source src="http://www.alanis50.com/Music/music.ogg" type="audio/ogg"/> 
</audio> 

<audio controls="controls" onloadeddata="var audioPlayer = this; if (!readingMusic){readingMusic = true;setTimeout(function() { audioPlayer.play(); }, 2000)}" }> 
    <source src="http://www.alanis50.com/Music/music.mp3" type="audio/mp3"/> 
    <source src="http://www.alanis50.com/Music/music.ogg" type="audio/ogg"/> 
</audio> 
+0

朱利安,我向你致敬!谢谢你,这让我疯狂。我想我今天学到了一些东西! :) – user2287658

+0

既然你显然是一个非常聪明的人,你知道实现这个球员闪回后备的最好方法吗?对于IE? – user2287658

+0

我不知道“最好”的方式,因为我不是HTML5的专家,但是这个页面似乎包含了您的相关信息:http://dev.opera。com/articles/view/simple-html5-video-flash-fallback-custom-controls/ –

0

那么,你的jScript.jsthat's a part

看来,问题是在这条线:

location = base + "/#" + current.replace(base, ""); 

您导航到新的URL不离开当前页面(如果起源都是一样的,唯一不同的是哈希值)。我建议您在更改位置来源后开始播放音频。

因此,您可能会在此位置更改后立即放置自动播放注册码。