2017-07-27 52 views
0

我创建简单的addEventListener音频,想法是如果我的临时温度超过40℃,声音会播放,如果低于40℃,它会停止播放。但是,当我尝试运行时,它会玩多次。例如,如果12:12:12我的temp 41和12:12:13我的temp是50,它会播放音频两次。我怎样才能在一次播放一个音频?当温度低于40摄氏度时,如何暂停或停止音频停止? 我结合本addEventListener与火力数据库 当数据改变时停止播放音频

window.addEventListener('load', function() { 
 
    firebase.database().ref('sensor').limitToLast(1).on('child_added', function(data) { 
 
     var sensor = data.val(); 
 
     console.log("suhu gauge is :"+sensor.temp) 
 
     if (sensor.temp > 40) { 
 
      myAudio = new Audio('audio/alarm.mp3'); 
 
      myAudio.addEventListener('ended', function() { 
 
       this.currentTime = 0; 
 
       this.play(); 
 
      }, false); 
 
      myAudio.play() 
 
     } 
 
     else if (sensor.temp < 40){ 
 
      myAudio = new Audio('audio/alarm.mp3'); 
 
      myAudio.addEventListener('ended', function() { 
 
       this.currentTime = 0; 
 
       this.pause(); 
 
      }, false); 
 
     } 
 
     mydata.setValue(0, 1, sensor.temp); 
 
     chart.draw(mydata, myoptions); 
 
     console.log(sensor.temp); 
 
    }); 
 
});

+0

你的意思是摄氏度与“C”? – Luca

+0

为什么你在'ended'事件处理程序中再次调用'.play()'? – guest271314

+0

您在'terminate'处理程序中删除'this.play();'如果您想暂停音频,则使用'.pause();'event'if temp <40' –

回答

0

定义myAudioended事件处理程序异步函数之外,从ended事件处理程序中除去this.play(),使用HTMLMediaElement.paused.ended属性,以确定是否介质被暂停或玩

window.addEventListener('load', function() { 
    myAudio = new Audio('audio/alarm.mp3'); 
    myAudio.addEventListener('ended', function() { 
     this.currentTime = 0; 
    }, false); 
    firebase.database().ref('sensor').limitToLast(1).on('child_added', function(data) { 
     var sensor = data.val(); 
     console.log("suhu gauge is :"+sensor.temp) 
     if (sensor.temp > 40) { 
      if (myAudio.paused || myAudio.ended) { 
       myAudio.play() 
      } 
     } 
     else if (sensor.temp < 40) { 
      if (!myAudio.paused) { 
       myAudio.pause(); 
      } 
     } 
     mydata.setValue(0, 1, sensor.temp); 
     chart.draw(mydata, myoptions); 
     console.log(sensor.temp); 
    }); 
}); 
+0

我用你的代码替换我的代码,但它只播放一次并结束,这个想法与我的旧代码一样,这个声音必须继续播放,直到我的温度降低比40.但我很欣赏你的代码.. –

+0

你有没有尝试过将'Audio'实例的'.loop'属性设置为'true'? – guest271314

+0

是这样吗? :https://jsfiddle.net/adeguntoro/k80cLnao/ –