首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript/JQuery仅在页面焦点上执行Javascript

Javascript/JQuery仅在页面焦点上执行Javascript
EN

Stack Overflow用户
提问于 2011-06-29 22:31:29
回答 1查看 2.7K关注 0票数 2

如果用户在实际的选项卡/页面上,在javascript中是否有可能只执行javascript?

例如,如果他切换到另一个选项卡,则javascript过程将暂停,并且当他返回到该选项卡时,javascript将继续该过程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-29 22:40:52

没有直接的方法,除非你使用特定于浏览器的代码,或者不是完全标准的代码(参见katspaugh的答案)。

“‘Stop”解决方案

  • 将您的代码设计为“可停止”。这是你必须根据你的上下文弄清楚的东西。
  • 然后添加如下内容:

。。

代码语言:javascript
运行
复制
<html> 
<head> 
</head> 
<body> 
    <script> 
    window.onblur = function() {
        yourStopFunctionHere().
    }
    </script> 

</body> 
</html> 

“‘Assert”解决方案

在窗口具有焦点的真正重要的地方插入以下代码:

代码语言:javascript
运行
复制
if(windowHasFocus()) {
    //your code here
}

测试窗口是否具有焦点有不同的方法:JavaScript / jQuery: Test if window has focus

异步解决方案

代码语言:javascript
运行
复制
whenWindowHasFocus(fn); //where fn is the function you want to only run when window has focus

存在两种可能的实现之一.....

通过setTimeout等待

代码语言:javascript
运行
复制
function WhenWindowHasFocus(yourFunction){
    if(windowHasFocus()) {
        yourFunction();
    }
    setTimeout(function(){ WhenWindowHasFocus(yourFunction); }, 1000);
}

通过自定义事件等待

或者更好的是,如果您可以将依赖于窗口的功能(依赖于具有焦点的窗口的功能)包装到一个单独的函数中,然后将该函数“挂钩”到window.onfocus。不过,要小心这一条。您不希望完全覆盖window.onfocus函数(或者撤消刚才所做的工作)。相反,您可能必须使用某种类型的自定义事件。大多数js框架都提供了自定义事件。如果您这样做,window.onfocus函数将简单地触发一些自定义事件,并且您不必使用setTimeout手动编写任何循环代码。

代码语言:javascript
运行
复制
//The below is pseudo-code. custom events differ between js frameworks

window.onfocus = function(){
    window.FocusEvent.trigger()
}

function WhenWindowHasFocus(yourFunction){
    if(windowHasFocus()) {
        yourFunction();
    }
    window.focusEvent.addOnlyOnce(yourFunction);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6522399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档