Мышь / Клавиатура неактивны? Выполнить функцию, если она активна, и выполнить только один раз в секунду - PullRequest
0 голосов
/ 24 мая 2011

Я делаю сценарий подсчета пользователей с помощью PHP и jquery, и мне хотелось бы узнать, неактивен ли пользователь.

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

но как мне установить его так, чтобы он не обновлялся при каждом перемещении, а раз в 1 секунду? Как это?

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

тогда я также добавлю функцию нажатия клавиш с той же самой вещью, чтобы я мог также сказать, активна ли клавиатура или нет.

1 Ответ

1 голос
/ 24 мая 2011

Надеюсь, это говорит само за себя, и, надеюсь, это работает! Это немедленно уведомляет сервер , когда пользователь перемещает мышь, предполагая, что сервер не был уведомлен в течение секунды, И периодически.

Мы планируем activityNotification() запускать каждую секунду (используя что-то вроде jQuery timer или setInterval(func, time) функция ), чтобы обрабатывать следующую временную шкалу максимально быстро:

  • 0 мс: пользователь двигает мышь, сервер уведомлен немедленно
  • 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, и это приведет к серьезной разрядке батареи на мобильных устройствах.

...