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

うまくいけば、これは自明であり、うまくいけばうまくいきます!これは、サーバーが1秒以上通知されていないと仮定して、ユーザーがマウスを動かすとすぐにサーバーに通知し、定期的に通知します。

次のタイムラインを可能な限り応答して処理するために、 ( jQueryタイマー関数activityNotification()などを使用して)毎秒実行するようにスケジュールします。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を有効にしているわけではないことを忘れないでください。これにより、モバイルデバイスで深刻なバッテリーの消耗が発生します。

于 2011-05-24T12:16:20.290 に答える