ユーザーはjQueryを使って(マウスの動きで)存在する場合にのみ、私は()のsetTimeoutを実行するにはどうすればよいです

StackOverflow https://stackoverflow.com/questions/4034378

  •  26-09-2019
  •  | 
  •  

質問

I AJAX経由<div />を更新機能を持っています:

function update() {
    <!-- .ajax() --> 
    setTimeout(update(), 3000);}
}
私は必要なもの

は、ユーザーがマウスの動きがない場合ので、(私たちは、もし動きが、それはウェブサイトであると仮定します)、それは.mousemove()は更新されません、ウェブサイト上に存在しないときにこれが実行されていないということです。ところで、私たちが知るために行うことができ、他のものは、誰かがウェブサイト上でアクティブになっているがありますか?

どのようにこれを行うことができますか?事前にありがとうございます!

編集:たぶん私は悪い説明しました。私は活動がある場合にのみ更新する方法を知っておく必要があります。以下のようなFacebookは自分のニュースフィード、フロントページで行います。ありがとう!

役に立ちましたか?

解決

私はこのような何かになってしまっているかもしれないと思います。回避の日付計算。前回の更新以降、いくつかの活動があったのかどうかだけが心配()。

window.activeFlag = false;
window.updateDelay = 3000;

$(document).bind('mousemove scroll keydown', function(){ activeFlag = true; });

function update() {
  if(activeFlag) {
    doWork();
    activeFlag = false;
  }
}

window.setTimeout(update, updateDelay);

編集:私は、コードの欠陥を発見しました。以下は、より適切です。

window.activeFlag = false;
window.updateDelay = 3000;

$(document).bind('mousemove scroll keydown', function(){ activeFlag = true; });

function update() {
  if(activeFlag) {
    doWork();
    activeFlag = false;
  }
  window.setTimeout(update, updateDelay);
}

update();

他のヒント

あなたは、ユーザーが最後に移動したときに追跡するmousemoveハンドラを使用して、彼らは最後のX秒以内にマウスを移動した場合、プロセスにのみ起こる可能性があります。しかし、もちろん、ユーザーが何かを読んでそこに座っている場合、または、彼らは、キーボード指向の親切な人のなら、それは彼らがあることを欠場する傾向があります...あなたはおそらくうまくとしてkeydownを見てみたいと思いますのでます。

ここでのMouseMove例でいます:

jQuery(function($) {
    var count = 0, lastmove = new Date();

    $(document).mousemove(function() {
        ++count;
        lastmove = new Date();
        $('#display').html("Moved " + count + " times");
    });

});​

次に、あなたの更新コードは、これを行うことができます:

function update() {
    if (new Date() - lastmove < 60000) { // 60 seconds
        // Really do the update
    }
    else {
        // Check back in a few seconds
        setTimeout(update, 3000);
    }
}

オフトピックを、しかし、あなたの更新コード内のエラーを持っています。あなたは持っています:

setTimeout(update(), 3000);

...すぐにupdateを呼び出してから、スケジュールに3秒で起こるために何かをその戻り値を使用しようとします。あなたはupdateへの呼び出しが3秒で起こるようにスケジュールする場合は、それの後に()をオフに残します:

setTimeout(update, 3000);
私は、ユーザーが存在するかどうかを判断する簡単な方法がないと思います。

私はmousemovescrollkeypressの組み合わせを使用することになります。

var bUpdate = false;
function update() {

   if(bUpdate){
       ///perform your ajax request
   }
}

$(document).mousemove(function(){
    bUpdate = true;
    setTimeout(function(){bUpdate=false;}, 3000);}
});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top