我创建简单的addEventListener
音频,这个想法是如果我的温度超过 40 摄氏度,声音就会播放,如果低于 40 摄氏度,它就会停止。但是,当我尝试运行时,它会播放多次。例如,如果 12:12:12 我的温度为 41,而 12:12:13 我的温度为 50,它将播放两次音频。如何一次只播放一个音频?当温度低于 40 C 时,我如何暂停或停止我的音频?
我结合了这个 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);
});
});
最佳答案
定义 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);
});
});
关于javascript - 数据更改时停止播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353593/