使用addEventListener Javascript重置设置超时

使用addEventListener Javascript重置设置超时,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,我试图做一个功能,当点击鼠标时,可以看到你是活跃的或AFK。时间用完时,此人必须处于脱机状态。如果该用户在时间用完后再次单击,则该用户必须重新联机。此外,如果他在时间内再次单击,则必须始终重置时间,以便您可以看到他在页面上处于活动状态。有人知道我需要在这里调整什么才能让它工作吗 var time; window.addEventListener('click', function() { time = setTimeout(function() { SaveUrl('Save/

我试图做一个功能,当点击鼠标时,可以看到你是活跃的或AFK。时间用完时,此人必须处于脱机状态。如果该用户在时间用完后再次单击,则该用户必须重新联机。此外,如果他在时间内再次单击,则必须始终重置时间,以便您可以看到他在页面上处于活动状态。有人知道我需要在这里调整什么才能让它工作吗

var time; 

window.addEventListener('click', function() {
  time = setTimeout(function() { 
    SaveUrl('Save/SetIsOnlineUser', { isOnline: false }); 
  }, 20000);
})

window.addEventListener("click", myFunction);

function myFunction() {
  clearTimeout(time)
  SaveUrl('Save/SetIsOnlineUser', { isOnline: true });
}

当您在同一事件下运行的两个处理程序下运行相反的逻辑时,您的逻辑是有缺陷的

要解决这个问题,您需要使用单个事件处理程序。您可以在单击处理程序中立即将用户设置为联机,然后在N秒后设置超时以将其标记为脱机,如下所示:

var时间;
window.addEventListener('click',function(){
清除超时(时间)
SaveUrl('Save/SetIsOnlineUser'{
isOnline:对
});
time=setTimeout(函数(){
SaveUrl('Save/SetIsOnlineUser'{
isOnline:错误
});
}, 5000);
})
函数SaveUrl(u,o){
console.log('Online:',o.isOnline);
}