10

ページ上の要素が変更されたときにサウンドを再生したい。これを行う方法は知っていますが、最初の変更でのみ再生することはできません。ユーザーがウィンドウ(タブ)にフォーカスして再度ぼかしを入れるまで、後で再生することはできません。

私の現在のコード:

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

2 に答える 2

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、Operaでこれをテストしました(innerHeightチェックを除く)(ChromeはWAVオーディオファイルの再生をサポートしていません。MP3、AAC、またはOgg Vorbis形式のみをサポートしています。)

于 2010-11-24T12:48:16.273 に答える
0

これが唯一のDOMNodeInsertedハンドラーである場合は、次のように、作業が完了したら削除します(今後の挿入をすべて安くします)。

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
  });
}
于 2010-11-24T13:45:00.730 に答える