希望这是不言自明的,希望它有效!当用户移动鼠标时,这会立即通知服务器,假设服务器在一秒钟内没有收到通知,并且会定期通知。
我们安排activityNotification()
每秒运行一次(使用jQuery timer或setInterval(func, time)
function之类的东西),以便尽可能响应地处理以下时间线:
- 0 ms:用户移动鼠标,服务器立即通知
- 657 毫秒:用户按键,但过早通知服务器活动
- 1000 毫秒:activityNotification() 按计划运行,看到我们有未通知服务器的活动,通知服务器
- 2000 毫秒:activityNotification() 按计划运行,但没有通知服务器
- 2124 毫秒:用户移动鼠标,服务器立即通知,因为距离服务器上次通知已经 1.124 秒
代码:
//Track the last activity you saw
var lastActivity = 0;
//Remember the last time you told the server about it
var lastNotified = 0;
//Determines how frequently we notify the server of activity (in milliseconds)
var INTERVAL = 1000;
function rememberActivity() {
lastActivity = new Date().getTime();
activityNotification();
}
function activityNotification() {
if(lastActivity > lastNotified + INTERVAL) {
//Notify the server
/* ... $.ajax(); ... */
//Remember when we last notified the server
lastNotified = new Date().getTime();
}
}
setInterval('activityNotification()', INTERVAL);
$.mousemove(function() {
//Remember when we last saw mouse movement
rememberActivity();
});
$.keyup(function() {
//Remember when we last saw keyboard activity
rememberActivity();
});
请记住,并非所有用户都会启用 JavaScript,这会导致移动设备严重消耗电池电量。