Javascript 只有当用户使用jQuery时(鼠标移动),我如何才能执行setTimeout()
我有一个通过AJAX更新Javascript 只有当用户使用jQuery时(鼠标移动),我如何才能执行setTimeout(),javascript,jquery,settimeout,Javascript,Jquery,Settimeout,我有一个通过AJAX更新的函数: function update() { <!-- .ajax() --> setTimeout(update(), 3000);} } 函数更新(){ setTimeout(更新(),3000);} } 我需要的是,当用户不在网站上时,不会执行此操作,因此如果鼠标没有移动(我们假设鼠标在网站上移动),则不会更新.mousemove()。顺便说一句,我们还可以做些什么来知道有人活跃在这个网站上 如何做到这一点?提前谢谢你 编辑:可
的函数:
function update() {
<!-- .ajax() -->
setTimeout(update(), 3000);}
}
函数更新(){
setTimeout(更新(),3000);}
}
我需要的是,当用户不在网站上时,不会执行此操作,因此如果鼠标没有移动(我们假设鼠标在网站上移动),则不会更新.mousemove()
。顺便说一句,我们还可以做些什么来知道有人活跃在这个网站上
如何做到这一点?提前谢谢你
编辑:可能我解释得不好。我需要知道只有在有活动时才更新的方法。就像Facebook在头版新闻提要上所做的那样。谢谢 您可以使用
mousemove
处理程序跟踪用户最后一次移动的时间,然后仅当用户最后一次在X秒内移动鼠标时,该过程才会发生。但是当然,如果用户坐在那里读东西,或者如果他们是一个键盘导向型的人,那么他们往往会忘记他们在那里。。。因此,您可能还需要查看键控
:
然后,您的更新代码可以执行以下操作:
function update() {
if (new Date() - lastmove < 60000) { // 60 seconds
// Really do the update
}
else {
// Check back in a few seconds
setTimeout(update, 3000);
}
}
…它将立即调用update
,然后尝试使用其返回值来计划三秒内发生的事情。如果希望在三秒内调用update
,请在调用后关闭()
:
您可以使用
mousemove
处理程序跟踪用户最后一次移动的时间,然后仅当用户在X秒内最后一次移动鼠标时,才会执行该过程。但是当然,如果用户坐在那里读东西,或者如果他们是一个键盘导向型的人,那么他们往往会忘记他们在那里。。。因此,您可能还需要查看键控
:
然后,您的更新代码可以执行以下操作:
function update() {
if (new Date() - lastmove < 60000) { // 60 seconds
// Really do the update
}
else {
// Check back in a few seconds
setTimeout(update, 3000);
}
}
…它将立即调用update
,然后尝试使用其返回值来计划三秒内发生的事情。如果希望在三秒内调用update
,请在调用后关闭()
:
我认为没有简单的方法来确定用户是否在场
我会结合使用
鼠标移动
,滚动
,按键
,我认为没有简单的方法来确定用户是否在场
我会结合使用
鼠标移动
,滚动
,按键
,我想我可能会得到这样的结果。避免日期运算。只关心自上次更新()以来是否有一些活动
编辑:我发现了代码中的一个缺陷。以下内容更为恰当:
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();
我想我可能会有这样的结局。避免日期运算。只关心自上次更新()以来是否有一些活动 编辑:我发现了代码中的一个缺陷。以下内容更为恰当:
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();
我可以使用@galambalazs建议的.bind(“mousemove scroll keypress”)代替.mousemove()?非常感谢。PS:这会延迟吗?@Isem:是的,尽管我会使用
.bind('mousemove scroll keydown')
。如果您在bind
处理程序中执行的操作非常小(如设置lastmove=new Date()
),我认为这不会导致太多开销,当然您的里程数可能会有所不同。我可以使用@galambalazs建议的.bind(“mousemove scroll keypress”)代替.mousemove()?非常感谢。PS:这会延迟吗?@Isem:是的,尽管我会使用.bind('mousemove scroll keydown')
。如果在bind
处理程序中保持所做的非常小(如设置lastmove=new Date()
),我认为这不会造成太多开销,当然,您的里程数可能会有所不同。这似乎更准确。为什么是窗户。setTimeout?你是在问我为什么写“窗口”。setTimeout?setTimeout是window对象的一种方法。似乎更准确。为什么是窗户。setTimeout?你是在问我为什么写“窗口”。setTimeout?setTimeout是window对象的一种方法。
var bUpdate = false;
function update() {
if(bUpdate){
///perform your ajax request
}
}
$(document).mousemove(function(){
bUpdate = true;
setTimeout(function(){bUpdate=false;}, 3000);}
});
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();