如果弹出窗口关闭,Javascript 停止/重置计时器

标签 javascript timer popup

嘿伙计们,我是 JavaScript 新手,但我想完成一些事情

我有这个 JavaScript 计时器脚本,我想打开一个弹出窗口并在单击按钮时启动计时器,如果我打开的弹出窗口关闭,还可以重置并停止计时器。

这是我的计时器代码:

<script type='text/javascript'>//<![CDATA[ 
window.onload=function(){
var isWaiting = false;
var isRunning = true;
var seconds = 15;
var countdownTimer;
var finalCountdown = false;

function GameTimer() {
    var minutes = Math.round((seconds - 30) / 60);
    var remainingSeconds = seconds % 60;
    if (remainingSeconds < 10) {
        remainingSeconds = "0" + remainingSeconds;
    }
    document.getElementById('waiting_time').innerHTML = "<i class='fa fa-spin fa-spinner'></i> " + minutes + ":" + remainingSeconds;
    if (seconds == 0) {
                    document.getElementById('waiting_time').innerHTML = "" ;
                    document.getElementById('step').innerHTML = "<button class='button' onclick='window.location.reload();return false;'><font color='#8d9d29'><i class='fa fa-arrow-circle-right'></i> Next step</font></button>" ;
        if (finalCountdown) {
            clearInterval(countdownTimer);
        } else {
            finalCountdown = true;
        }

    } else {
        isWaiting = true;
        seconds--;

        if (seconds == 0) {
            seconds=seconds;}     


    }
}
countdownTimer = setInterval(GameTimer, 1000);
}//]]>  

</script>

这会检查弹出窗口是否已关闭

var child = window.open('http://google.com/','','toolbar=0,status=0,width=926,height=536');
    var timer = setInterval(checkChild, 500);
    function checkChild() {
        if (child.closed) {
            /// something 
            clearInterval(timer);
        }
     }

如何合并这两个片段?

最佳答案

我不太确定这是否是您正在寻找的。我不知道我是否明白你需要什么。

我稍微重构了代码。最主要的是我将变量放入名为 GameObject

的全局对象中
<script type='text/javascript'>//<![CDATA[ 
    var GameObject = {
        "isWaiting" : false,
        "isRunning" : true,
        "seconds" : 15,
        "finalCountdown" : false,
        "child" : null,
        "countdownTimer" : null,
        "gametimer" : null
    };

    function onButtonClick() {
        //Open the window
        GameObject.child = window.open('http://google.com/','','toolbar=0,status=0,width=926,height=536');

        //Start the window open check interval
        GameObject.gametimer = setInterval(function() {
            if (GameObject.child.closed) {
                /// something 
                clearInterval(GameObject.gametimer);
                clearInterval(GameObject.countdownTimer);
            }
        }, 500);

        //Start the game timer
        GameObject.countdownTimer = setInterval(GameTimer, 1000);
    }

    function GameTimer() {
        var minutes = Math.round((GameObject.seconds - 30) / 60);
        var remainingSeconds = GameObject.seconds % 60;
        if (remainingSeconds < 10) {
            remainingSeconds = "0" + remainingSeconds;
        }
        document.getElementById('waiting_time').innerHTML = "<i class='fa fa-spin fa-spinner'></i> " + minutes + ":" + remainingSeconds;
        if (GameObject.seconds == 0) {
            document.getElementById('waiting_time').innerHTML = "" ;
            document.getElementById('step').innerHTML = "<button class='button' onclick='window.location.reload();return false;'><font color='#8d9d29'><i class='fa fa-arrow-circle-right'></i> Next step</font></button>" ;

            if (GameObject.finalCountdown) {
                clearInterval(GameObject.countdownTimer);
            } else {
                GameObject.finalCountdown = true;
            }

        } else {
            GameObject.isWaiting = true;
            GameObject.seconds--;

            if (GameObject.seconds == 0) {
                GameObject.seconds = GameObject.seconds;
            }
        }
    }
//]]>
</script> 

关于如果弹出窗口关闭,Javascript 停止/重置计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29480819/

相关文章:

javascript - 如何使用JavaScript打印div上的内容?

javascript - 为什么在 FabricJS 中没有任何缩进的靠近放置的对象彼此之间有一个空格

javascript - jQuery 字符串到日期问题

javascript - 执行 JavaScript 函数时显示警告框

javascript - 传单在鼠标悬停时显示弹出窗口

javascript - 单击按钮时显示列表中的某些元素

javascript - 无法运行 Angular 计时器指令

java - 使用 Timer/ScheduledThreadPool 来减少频繁更改元素的 CPU 负载

javascript - 如何在 2 次之间运行 js 函数

jquery - 如何在禁用 javascript 时使这些 jquery 弹出窗口回退到 css