我创建了简单的addEventListener
音频,我的想法是,如果我的温度超过40 C,声音将播放,如果低于40 C,它将停止。但是,当我尝试跑步时,它会发挥多次。例如,如果12:12:12我的临时41和12:12:13,我的温度是50,它将播放音频两次。我如何一次只播放一个音频?当温度低于40摄氏度时,我如何暂停或停止音频停止?
我将此addEventListener
与firebase数据库结合起来
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 :(得分:0)
在异步函数之外定义myAudio
和ended
事件处理程序,从this.play()
事件处理程序中删除ended
,使用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);
});
});