首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >鼠标/键盘处于非活动状态?如果处于活动状态,则执行函数,并且每秒仅执行一次

鼠标/键盘处于非活动状态?如果处于活动状态,则执行函数,并且每秒仅执行一次
EN

Stack Overflow用户
提问于 2011-05-24 19:59:53
回答 1查看 453关注 0票数 0

我正在用PHP和jquery制作一个用户统计脚本,我想有一种方法来告诉用户是否处于非活动状态。

代码语言:javascript
复制
$.mousemove(function(){
//get php to update time on user
});

但是,我应该如何设置它,使它不会每次移动都更新,而是每1秒更新一次?是像这样吗?

代码语言:javascript
复制
$.mousemove(function(){
//get php to update time on user
$.delay(1000);    
});

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-24 20:16:20

希望这是不言而喻的,希望它能起作用!这会在用户移动鼠标时立即通知服务器,假设在超过一秒钟内没有通知服务器,并且是周期性的。

我们安排activityNotification()每秒运行一次(使用jQuery timersetInterval(func, time) function之类的东西),以便尽可能响应地处理以下时间线:

  • 0毫秒:用户移动鼠标,服务器已通知immediately
  • 657毫秒:用户按下键,但通知服务器活动为时过早
  • 1000毫秒: activityNotification()按计划运行,看到我们有尚未通知服务器的活动,通知服务器
  • 2000毫秒: activityNotification()按计划运行,但没有通知服务器有关
  • 2124毫秒:用户移动鼠标,服务器立即通知,因为自上次通知服务器已有1.124秒

代码:

代码语言:javascript
复制
//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,这将导致移动设备上的电池严重耗尽。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6110052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档