2014-02-16 159 views
6

所以我在我的JavaScript中有if語句。當它返回true時,它會打開一個警告框並播放警報聲。問題是直到我點擊OK按鈕,聲音纔會播放。當警報被觸發時有聲音播放

以下是相關信息:

if (x > 10) { 
     var snd = new Audio('/alarm.mp3'); 
     snd.play(); 
     alert("Thank you!"); 
    } 

理想我想這是大約6秒長打,直到它是在年底或直到用戶點擊關閉了對話的聲音。但是在關閉警報框之前確實聽到警報聲會足夠好。

+0

因爲警報是一個阻塞調用,沒有執行,而它是開放的,你應該使用一個HTML模式框,http://www.webdesignerdepot.com/2012/10/creating-a-modal-window-with-html5-and-css3/ –

+1

只是一個預感:如果你延遲警報,聲音發揮,如' setTimeout(function(){alert(「Thank you!」)},500)'? –

+0

我喜歡關於警報而不是模式的一件事情是,當您處於不同的選項卡時,瀏覽器將使用警報轉到頁面。 – moosilauke18

回答

14

預緊你在HTML音頻文件事先喜歡:

<audio id="xyz" src="whatever_you_want.mp3" preload="auto"></audio> 

if(x > 10) 
{ 
    document.getElementById('xyz').play(); 
    alert("Thank you!"); 
} 

這應該肯定的工作。

+0

無論如何,如果用戶關閉警報,提前結束音頻? – moosilauke18

+1

在「Alert Okay」上執行任何操作的錯誤做法仍然可以嘗試如下所示: 'function myFunction()' '{' 'var r = alert(「You pressed a button!」);' '如果(R == TRUE)'' {'' }'' else' ''{' 的document.getElementById( 'XYZ')停止();'' ..OR..' 'document.getElementById('xyz')。controls.stop();' '}' – MixCoded

+0

不工作,聲音在警報關閉後 – cikatomo

0

您可以嘗試使用setTimeout()

if (x > 10) { 
     var snd = new Audio('/alarm.mp3'); 
     snd.play(); 
     setTimeout(function(){alert("Thank you!")},6000); 
    } 
+0

這個問題是,如果我重置x來第二次執行另一個警報由於setTimeout,警報不起作用。 – moosilauke18

1

爲什麼不利用HTML5音頻事件。

結束一次音頻結束播放

snd.addEventListener('ended', showAlert); 

function showAlert() { 
alert("YOUR MESSAGE"); 
} 
0

是triggred事件中,你可以使用:

var snd = new Audio('/alarm.mp3');  
snd .onended = function() { alert("Thank you!"); }; 
snd .play();