鼠标/键盘无效?如果激活则执行功能,并且仅在一秒内执行一次

时间:2011-05-24 11:59:53

标签: jquery delay mousemove

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

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

但是我应该如何设置它以便每次移动时都不会更新但每1秒更新一次?喜欢这个?

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

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

1 个答案:

答案 0 :(得分:1)

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

我们计划activityNotification()每秒运行一次(使用类似jQuery timersetInterval(func, time) function的内容),以便尽可能响应地处理以下时间轴:

  • 0 ms:用户移动鼠标,通知服务器 立即
  • 657 ms:用户按下键, 但是通知服务器还为时过早 活性
  • 1000毫秒: activityNotification()运行为 预定,看到我们有 我们没有通知的活动 服务器,通知服务器
  • 2000 ms:activityNotification()运行为 已安排,但没有通知服务器
  • 2124 ms:用户移动鼠标,服务器立即通知,因为自服务器上次通知以来已经过了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,这将导致移动设备严重耗尽电量。