2013-04-18 113 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不離開當前頁面(如果起源都是一樣的,唯一不同的是哈希值)。我建議您在更改位置來源後開始播放音頻。

因此,您可能會在此位置更改後立即放置自動播放註冊碼。