ユーザーはjQueryを使って(マウスの動きで)存在する場合にのみ、私は()のsetTimeoutを実行するにはどうすればよいです
-
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);
私は、ユーザーが存在するかどうかを判断する簡単な方法がないと思います。
私はmousemove
、scroll
、keypress
の組み合わせを使用することになります。
var bUpdate = false;
function update() {
if(bUpdate){
///perform your ajax request
}
}
$(document).mousemove(function(){
bUpdate = true;
setTimeout(function(){bUpdate=false;}, 3000);}
});