jQuery屏幕内运行、超出屏幕暂停。

3

有没有一种方法可以在某人离开页面但不查看它时暂停长轮询脚本?因此,如果我打开了应用程序的多个标签或窗口,只有我正在积极查看的标签页才会运行活动的长轮询脚本?


这可以分解为两个子问题,1)是否可能检测到用户不再查看页面(而且,顺便问一下,什么是“查看”),2)我能否使用这些信息暂停长轮询脚本(这取决于您的长轮询解决方案)。 - Matt
查看意味着不集中于特定的窗口/标签页。就长轮询而言,如果我有一些触发器可以暂停/停止,直到焦点回到该窗口,那么我可以很容易地自行停止它。 - David
3个回答

1

实际上,在JavaScript中没有有效的暂停脚本的方法。但是让我建议一个:

function pausecomp(millis){

    var date = new Date();
    var curDate = null;

    do{ 
        curDate = new Date();
    }while(curDate-date < millis);
} 

这将暂停整个脚本一定的毫秒数。然而,这并不是一个好的实践。

Javascript 允许设置延迟后发生的事件:

setTimeout("alert('hello')",1250);

当代码执行到这一行时,setTimeout方法会在1250毫秒后调用alert。

希望这些信息能对你有所帮助;)


为了检测鼠标离开窗口的事件,我已经为您设置了一个jsfiddle:http://jsfiddle.net/xPAwu/1/ 此外,在stackoverflow上也有一些相关问题:如何检测鼠标离开窗口? 当鼠标离开浏览器窗口时的Javascript事件

你的第一个脚本会让浏览器崩溃。建议不要这样做。 - Edgar Villegas Alvarado
我指出他不应该使用它,我写这是为了指出对比。 - DarkLeafyGreen

0

您可以查看页面空闲的时间:

<script>
   $(document).ready(function(){
      var lastEventTime = null;
      //Detect a user interaction
      $(document).bind("mousemove keyup mousewheel", function(event){
         lastEventTime = new Date(); //Store last event time
      });
      setInterval(function(){
         var currentTime = new Date();
         var idleSeconds = (currentTime.getTime() - lastEventTime.getTime())/1000;
         if( idleSeconds > 60) return; //If more than 60 seconds idle, stop polling
         pollingScript(); //Here goes your script
      }, 1000);
   });
</script>

我们正在做的是捕获用户交互(移动鼠标或按键)。如果长时间没有发生交互(例如在60秒内),我们将停止执行轮询脚本。
希望这可以帮到你。

0

这里的难点在于如何判断用户是否真正处于空闲状态。我过去使用过idleTimer插件,效果似乎还不错。作者使用了一系列事件(mousemove、keypress等)来判断用户是否活跃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接