我在这里得到了这一行,我真的很难执行一次离线部分。
当用户在线时,它会显示一次。没关系。但是,当用户离线时,控制台中每 10 秒就会显示 --- 已离线
。我只希望它在用户离线时显示离线
,然后停止,直到再次在线。请在这里帮助我。
window.setInterval(function() {
if (document.getElementById('statusIndexer') == null)
return;
for (var i = 0; i < WLAPStore.Presence.models.length; i++) {
var m = WLAPStore.Presence.models[i];
var id = 'p' + m.id.slice(0, -5);
var clientBox = document.getElementById(id);
if (clientBox !== null) {
var img = clientBox.getElementsByTagName('img')[0];
img.classList.remove('isOnline');
if (m.isOnline) {
console.log(id + ' is online');
clientBox.parentNode.prepend(clientBox);
img.classList.remove('isOffline');
img.classList.add('isOnline');
} else {
console.log(id + ' is offline');
clientBox.parentNode.prepend(clientBox);
img.classList.remove('isOnline');
img.classList.add('isOffline');
(document.getElementById('statusIndexer') == null)
return;
}
}
}
}, 1000);
最佳答案
使用全局变量来保存之前的状态,并在记录消息之前检查它是否发生变化。
var onlineState = {};
window.setInterval(function() {
if (document.getElementById('statusIndexer') == null)
return;
for (var i = 0; i < WLAPStore.Presence.models.length; i++) {
var m = WLAPStore.Presence.models[i];
var id = 'p' + m.id.slice(0, -5);
var clientBox = document.getElementById(id);
if (clientBox !== null) {
var img = clientBox.getElementsByTagName('img')[0];
img.classList.remove('isOnline');
if (m.isOnline) {
if (m.isOnline !== onlineState[id]) {
console.log(id + ' is online');
}
clientBox.parentNode.prepend(clientBox);
img.classList.remove('isOffline');
img.classList.add('isOnline');
} else {
if (m.isOnline !== onlineState[id]) {
console.log(id + ' is offline');
}
clientBox.parentNode.prepend(clientBox);
img.classList.remove('isOnline');
img.classList.add('isOffline');
(document.getElementById('statusIndexer') == null)
return;
}
onlineState[id] = m.isOnline;
}
}
}, 1000);
关于javascript - 我如何执行此行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51406989/