0

我正在用 PHP 和 jquery 制作一个用户计数脚本,我想知道用户是否处于非活动状态。

$.mousemove(function(){
//get php to update time on user
});

但是我应该如何设置它,以便它不会在每次移动时更新,而是每 1 秒更新一次?像这样?

$.mousemove(function(){
//get php to update time on user
$.delay(1000);    
});

然后我还将添加一个具有相同功能的按键功能,以便我还可以判断键盘是否处于活动状态。

4

1 回答 1

1

希望这是不言自明的,希望它有效!当用户移动鼠标时,这会立即通知服务器,假设服务器在一秒钟内没有收到通知,并且会定期通知。

我们安排activityNotification()每秒运行一次(使用jQuery timersetInterval(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,这会导致移动设备严重消耗电池电量。

于 2011-05-24T12:16:20.290 回答