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

后端 未结 2 1434
不知归路
不知归路 2021-02-14 07:05

I want a sound to play when an element changes on a page. I know how to do this, but I can\'t get it to play only on the first change, and don\'t do it later, u

相关标签:
2条回答
  • 2021-02-14 07:41

    Use a variable to represent whether the sound should be played or not.

    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;
        } 
      });
    }
    

    Edit: I've tested this working on Firefox, Safari, and Opera (except for the innerHeight check). (Chrome doesn't support playing WAV audio files, only the MP3, AAC, or Ogg Vorbis formats.)

    0 讨论(0)
  • 2021-02-14 07:52

    If this is your only DOMNodeInserted handler, I'd just remove it when the work is done (making all future insertions cheaper), like this:

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

    If it's not the only handler that's workable too, just make it a named function:

    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
      });
    }
    
    0 讨论(0)
提交回复
热议问题