使用addEventListener Javascript重置setTimeout

时间:2017-11-16 09:36:14

标签: javascript jquery settimeout

我正在尝试创建一个功能,当您单击鼠标时,可以看到您处于活动状态或AFK。当时间用完时,此人必须离线。如果此人在时间用完后再次点击,则此人必须重新上线。此外,如果他在该时间内再次点击,则必须始终重置该时间,以便您可以看到他在页面上处于活动状态。有谁知道我需要调整什么才能使它工作?

=SUM(INDEX(INDIRECT(D3),0,2))

1 个答案:

答案 0 :(得分:1)

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

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

var time;

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

function SaveUrl(u, o) {
  console.log('Online:', o.isOnline);
}

请注意,我只用了5秒的时间使效果更明显。