Проверка пользователя движения мыши


Я пытаюсь обновить свой сервер, чтобы он знал, что пользователь имел какую-то активность в последние 15 минут. Для того чтобы сделать это, я сделал это осуществление:

var page = {

    updated: false,

    change_state: function(e)   {
        var self = this;
        if(!this.updated){
            debugConsole.log('Moved mouse');
            setTimeout(function(){
                self.updated = false;
            },  //                10000); //10 seconds
                120000); //2 minutes
            this.updated = true;
            $.ajax({
                url: 'comet/update.php',
                success: function(data){
                    debugConsole.log('Moved mouse at: ' + data);
                }
            })
        }
    },

    mouse_click: function(e)    {
        this.updated = false;
    }

}

$("*").live('mousemove',function(e){
    e.stopPropagation();
    page.change_state(e); });

$("*").live('click',function(e){
    page.mouse_click(e); });

Я сделал так, что он вступает в силу только через 2 минуты от последнего действия, если последнее действие было нажать.

Это лучший способ сделать это?



297
3
задан 6 мая 2011 в 05:05 Источник Поделиться
Комментарии
3 ответа

Я не рекомендую использовать $("*").жить, требуется только события на теле документа, так долго, как им позволяют правильно пузырь.

2
ответ дан 6 мая 2011 в 06:05 Источник Поделиться

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

var page = {
lastUpdated: (new Date).getTime(),
mouse_move: function(e) {
this.lastUpdated = (new Date).getTime();
},
mouse_click: function(e) {
this.lastUpdated = (new Date).getTime();
},
checkForLife: function () {
if( page.lastUpdated + 15 * 60 * 1000 > (new Date).getTime() ) {
$.post('comet/update.php',{status: 'alive'});
} else {
$.post('comet/update.php',{status: 'dead'});
}
}
}
$("body").mousemove( page.mouse_move );
$("body").click( page.mouse_click );
setInterval( page.checkForLife, 2 * 60 * 1000 );

1
ответ дан 7 мая 2011 в 02:05 Источник Поделиться

Интернет .жить() является устаревшим, начиная с jQuery 1.7 мы используем .на() метод:

$("*").on('mousemove',function(e){
e.stopPropagation();
page.change_state(e);
});

$("*").on('click',function(e){
page.mouse_click(e);
});

Также я не рекомендовал бы присоединение обработчика событий к этим глобальным элементом.

1
ответ дан 15 марта 2013 в 03:03 Источник Поделиться