Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只有当用户使用jQuery时(鼠标移动),我如何才能执行setTimeout()_Javascript_Jquery_Settimeout - Fatal编程技术网

Javascript 只有当用户使用jQuery时(鼠标移动),我如何才能执行setTimeout()

Javascript 只有当用户使用jQuery时(鼠标移动),我如何才能执行setTimeout(),javascript,jquery,settimeout,Javascript,Jquery,Settimeout,我有一个通过AJAX更新的函数: function update() { <!-- .ajax() --> setTimeout(update(), 3000);} } 函数更新(){ setTimeout(更新(),3000);} } 我需要的是,当用户不在网站上时,不会执行此操作,因此如果鼠标没有移动(我们假设鼠标在网站上移动),则不会更新.mousemove()。顺便说一句,我们还可以做些什么来知道有人活跃在这个网站上 如何做到这一点?提前谢谢你 编辑:可

我有一个通过AJAX更新
的函数:

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();