当数据改变时停止播放音频
我创建简单的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);
});
});
定义myAudio
和ended
事件处理程序异步函数之外,从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);
});
});
我用你的代码替换我的代码,但它只播放一次并结束,这个想法与我的旧代码一样,这个声音必须继续播放,直到我的温度降低比40.但我很欣赏你的代码.. –
你有没有尝试过将'Audio'实例的'.loop'属性设置为'true'? – guest271314
是这样吗? :https://jsfiddle.net/adeguntoro/k80cLnao/ –
你的意思是摄氏度与“C”? – Luca
为什么你在'ended'事件处理程序中再次调用'.play()'? – guest271314
您在'terminate'处理程序中删除'this.play();'如果您想暂停音频,则使用'.pause();'event'if temp