停止setInterval直到事件重新出现

时间:2014-09-04 03:22:28

标签: javascript jquery setinterval social clearinterval

我已经制作了一些共享选项,用户点击第一张卡片上的社交分享按钮,一个窗口打开,当他们关闭窗口时,它会启动对下一张卡片的更改。

以下是我打开和跟踪窗口关闭的方式:

的Javascript

var shareWindow;

//Open the window on call
function openShareWin(link) {
  shareWindow = window.open(link, 'rmShare', 'location=0,status=0,menubar=0,scrollbars=1,resizable=1,width=520,height=350');
}

//Initiate card flip on close
var pollTimer = window.setInterval(function() {
    if (shareWindow.closed !== false) { // !== is required for compatibility with Opera
        window.clearInterval(pollTimer);
        flipOnClose();
    }
}, 200);

function flipOnClose() {
  $(document).ready(function() {
    $('.share-rotate').trigger('click');
  });
}

一切都很好......第一次。但是,如果用户返回共享菜单(没有刷新),打开窗口,共享站点,并关闭窗口,事件不会触发。

我知道这是因为我打电话给clearInterval,但我必须这样做才能让setInterval自动翻看剩余的卡片。

如何在用户关闭窗口时导致flipOnClose()触发一次,并且在每次连续执行操作时触发?

编辑:我也收到此错误:Uncaught TypeError: Cannot read property 'closed' of undefined

1 个答案:

答案 0 :(得分:0)

我不确定我是否有问题,但正如我所看到的,你可以通过将间隔创建放在打开窗口的同一个函数中来解决它。然后,每次打开窗口时,都会创建间隔。像这样:

var shareWindow;

//Open the window on call
function openShareWin(link) {
    shareWindow = window.open(link, 'rmShare', 'location=0,status=0,menubar=0,scrollbars=1,resizable=1,width=520,height=350');

    //Initiate card flip on close
    var pollTimer = window.setInterval(function() {
        if (shareWindow.closed !== false) { // !== is required for compatibility with Opera
            window.clearInterval(pollTimer);
            flipOnClose();
        }
    }, 200);
}

function flipOnClose() {
    $(document).ready(function() {
        $('.share-rotate').trigger('click');
    });
}

如果我错了,请告诉我。