当前位置: 首页 > 知识库问答 >
问题:

用户离开选项卡时暂停的setInterval()?

徐昕
2023-03-14

javascript中是否有类似setInterval()的方法,在用户离开选项卡时停止,在用户再次进入选项卡时恢复?

共有1个答案

袁鸿畴
2023-03-14

您可以创建自己的API,使用Visibility API检测选项卡何时可见或隐藏,并在引擎盖下调用本机setIntervalclearInterval

var mySetInterval, myClearInterval;
(function() {
  var data = Object.create(null),
      id = 0;
  mySetInterval = function mySetInterval(func, time) {
    data[id] = {
      nativeID: setInterval(func, time),
      func: func,
      time: time
    };
    return id++;
  };
  myClearInterval = function myClearInterval(id) {
    if(data[id]) {
      clearInterval(data[id].nativeID);
      delete data[id];
    }
  };
  document.addEventListener('visibilitychange', function() {
    if(document.visibilityState == 'visible')
      for(var id in data)
        data[id].nativeID = setInterval(data[id].func, data[id].time);
    else
      for(var id in data)
        clearInterval(data[id].nativeID);
  });
})();
var mySetInterval, myClearInterval;
(function() {
  var data = Object.create(null),
      id = 0;
  mySetInterval = function mySetInterval(func, time) {
    data[id] = {
      nativeID: setInterval(func, time),
      func: func,
      time: time
    };
    return id++;
  };
  myClearInterval = function myClearInterval(id) {
    if(data[id]) {
      clearInterval(data[id].nativeID);
      delete data[id];
    }
  };
  document.addEventListener('visibilitychange', function() {
    if(document.visibilityState == 'visible')
      for(var id in data)
        data[id].nativeID = setInterval(data[id].func, data[id].time);
    else
      for(var id in data)
        clearInterval(data[id].nativeID);
  });
})();

var log = document.getElementById('log'),
    timer;
document.getElementById('start').onclick = function() {
  var num = 0;
  myClearInterval(timer);
  timer = mySetInterval(function(){
    log.innerHTML = num++;
  }, 1e3);
};
<input id="start" type="button" value="Start" />
<span id="log"></span>
 类似资料:
  • 下面的示例有一个名为London的选项卡,其中有另一个名为Paris的选项卡。我怎么能在伦敦不结帐的情况下打开巴黎? 该示例直接来自W3SCHOOL,但经过了一些修改以适应我的用例。 null null 我相信问题是,“活跃”班从伦敦消失,因此,一旦我向巴黎施压,就会关闭。但我不擅长jQuery。 我想它可以很容易地在W3接口上测试:https://www.w3schools.com/howto/

  • 背景:我正在做一些用户界面测试,需要检测人们是否注意到了。但是,这个问题与页面可见性API无关。 具体地说,我想知道如果当前选项卡在不同的浏览器中不活动,或者浏览器窗口不活动,我的Javascript代码将受到怎样的影响。到目前为止,我已经挖掘出以下内容: ios 5在选项卡不活动时暂停javascript 我有以下问题: 除了移动浏览器之外,桌面浏览器是否在选项卡不活动时暂停JS执行?何时以及哪

  • 由于Firefox不再支持Control+T选项卡,我开始使用driver.execute_script(“window.open('url','new_window')”) 我正在尝试显示我打开的不同选项卡的标题,并在它们之间切换。对于下面的示例,我期望输出是facebook、google和返回到facebook。现在的输出是facebook、facebook、facebook. 我尝试了从这里

  • 问题内容: 当我打开自定义JDialog以及关闭对话框以再次继续时,如何使我的应用程序暂停。 问题答案: 只需使用: 我通常从的构造函数中调用它。 请参阅中的Javadocs 。 http://java.sun.com/javase/6/docs/api/java/awt/Dialog.html#setModal(boolean) 这将导致执行在当前线程上阻塞,直到对话框关闭。 或者,您可以使用:

  • 可能会有暂停应用的需求,那这里给做了一个。 实现非常简单,就是对容器的启动使用做了一个Sleep 当然还有另一种方案是将 replace 设置为 0

  • 我对tabView有问题。第一个选项卡应始终显示相同的内容(称为搜索模板,用#{not curSearch.isClosable()}标识)。所有其他选项卡都是搜索实例(用#{curSearch.isClosable()}标识) 代码如下: 不幸的是,在第一个选项卡上有一些被称为curSearch对象的方法,这些方法仅在第二个选项卡和后面的选项卡上使用。如果我不使用ui:insert,它不会改变任