2010-11-24 5 views
10

ページ上の要素が変更されたときにサウンドを再生したい。私はこれを行う方法を知っていますが、最初の変更の場合にのみを再生することはできません。また、ユーザーがウィンドウ(タブ)にフォーカスを合わせて再びぼかしてしまうまで、後で行いません。SOチャットのように、要素が変更されたときにサウンドを再生するにはどうすればよいですか?

私の現在のコード:

var notif = new Audio('http://cycle1500.com/sounds/infbego.wav'); 
if (window.innerHeight === window.outerHeight) { 
    $(window).bind('DOMNodeInserted', function() { 
     notif.play(); 
    }); 
} 
+0

お仕事べきではない持って何を、あなたのオブジェクト呼び出し、このような安価挿入)、 '.bind()'には完了していません...そのスローではありません構文エラー? –

+0

**修正済み**ありがとうございました! – nyuszika7h

+0

**アップデート:**サウンドパスを修正しました。間違っていました。あなたの答えを更新してください。私は後で両方の答えをもう一度チェックします。 – nyuszika7h

答えて

4

音を再生するかどうかを表すために変数を使用します。

var shouldPlayAlertSound = true, 
    notif = new Audio('http://cycle1500.com/sounds/infbego.wav'); 
if (window.innerHeight === window.outerHeight) { 
    $(window).bind({ 
    'DOMNodeInserted': function() { 
     if (shouldPlayAlertSound) { 
     notif.play(); 
     } 
     shouldPlayAlertSound = false; 
    }, blur: function() { 
     shouldPlayAlertSound = true; 
    } 
    }); 
} 

編集:私は、Firefox、Safariの、および(innerHeightはチェックを除く)オペラにtested this workingをしました。

+0

このコードはうまくいくと思われ、** jsLint **には1つのエラーしか表示されません:*問題は6行目の文字48:代入または関数呼び出しが期待され、代わりに式を見た* 'shouldPlayAlertSound && notif.play() ; '。しかし、これを 'if(shouldPlayAlertSound === true){notif.play();と置き換えても。 } '、それは動作しません。 :/ – nyuszika7h

+0

**ありがとうございます!**あなたの新しいコードを少し修正しました。 http://jsfiddle.net/Nyuszika7H/hpRHR/ – nyuszika7h

0

これは唯一のDOMNodeInsertedハンドラであれば、作業が完了すると削除されます(すべての未来を作っています)。ChromeはWAVオーディオファイルの再生をサポートしていません(MP3、AAC、またはOgg Vorbisのフォーマットをサポートしていません)。

notif = new Audio('http://cycle1500.com/sounds/infbego.wav'); 
if (window.innerHeight === window.outerHeight) { 
    $(window).bind({ 
    'DOMNodeInserted': function() { 
     notif.play(); 
     $(window).unbind('DOMNodeInserted'); 
    } 
    }); 
} 

それはちょうどそれという名前の関数にする、あまりにも実行可能だないだけハンドラの場合:

notif = new Audio('http://cycle1500.com/sounds/infbego.wav'); 
if (window.innerHeight === window.outerHeight) { 
    function play() { notif.play(); $(window).unbind('DOMNodeInserted', play); } 
    $(window).bind({ 
    'DOMNodeInserted': play 
    }); 
}