簡體   English   中英

如何在元素更改時播放聲音,例如SO Chat嗎?

[英]How do I play a sound when an element changes, like SO Chat does?

我希望在頁面上元素發生變化時播放聲音。 我知道如何做到這一點,但我不能讓它只在第一次更改時播放,並且不要在以后執行,直到用戶聚焦窗口(選項卡)並再次模糊它。

我目前的代碼:

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

使用變量來表示是否應該播放聲音。

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格式。)

如果這是你唯一的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
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM