需要添加一个告警功能,当该节点故障时需要闪烁告警,所以每次判定有故障时就会执行节点告警函数并添加定时器。开始的时候每次执行后如果有新的数据产生就会再次执行一次定时器,这样一个节点可能有多个定时器产生,闪烁的时间也会累加,频率变高。
为了解决这个问题,使用了以下方法:
var timerDS = new Object();
var timenum=0;
//查找节点并告警
function nodeAlarm(keys,array){
timenum=keys;
{if $Request.controller == 'Index' && $Request.action == 'index'}
if(!array.ServerProcessState||array.ServerProcessState!="1"){
if(!array.Main||array.Main!="1"){
if(timerDS[timenum]!=null){
clearInterval(timerDS[timenum]);
timerDS[timenum]=null;
}
editor.scene.findElements(function (e) {
if (e.id == keys) {
timerDS[timenum]=setInterval(function () {
if (e.alarm == '设备告警') {
e.alarm = null;
} else {
e.alarm = '设备告警';
e.alarmColor = '0,0,255';
//e.alarmFont="20px 宋体 ";
}
}, 600);
}
})
}else{
if(timerDS[timenum]!=null){
clearInterval(timerDS[timenum]);
timerDS[timenum]=null;
}
editor.scene.findElements(function (e) {
if (e.id == keys) {
timerDS[timenum]=setInterval(function () {
if (e.alarm == '设备告警') {
e.alarm = null;
} else {
e.alarm = '设备告警';
//e.alarmFont="20px 宋体 ";
}
}, 600);
}
})
}
}else{
if(array.Main=="1"){
editor.scene.findElements(function (e){
if (e.id == keys) {
console.log(e);
}
})
}
}
{/if}
}
先定义一个定时器数组,然后定义一个变量表示数组中的id
该id和传过来的参数keys一样,这样保证了每个定时器都是独一无二的,然后每次要生成定时器时先判断这个定时器是否存在,如果存在则先清除定时器,然后再产生该定时器。如果不存在,则生成该定时器。
这样保证了不会累加,也不会相互之间影响。