全局变量不会改变

时间:2019-06-17 00:39:38

标签: javascript

我正在尝试设置一个计时器以关闭html页面上的模式。问题是我需要在函数中使用全局变量,并且无法将值重新分配给该变量。

我在许多网站上都在寻找答案,但是没有一个与我的代码兼容。在声明时正确设置了该值,但是以后在函数中调用它时不能重新分配它(而不是简单地减小它的值)。

在浏览器的开发工具中未检测到错误。

var delayToCloseModal = 5;

function AnimateModal() {

    // Each time this function is called
    delayToCloseModal = 5; // HERE IS THE PROBLEM!!!
                           // delayToCloseModal is not set at 5 again


    // If the modal isn't oppened
    if (document.getElementById("modal").style.opacity < 0.01) {
        // Open Modal
    }


    // Check every second if the timer is done, else reduce it by 1
    var checkTimer = setInterval(CheckCounterDone, 1000);


    function CheckCounterDone() {
        if (delayToCloseModal > 0) {
            // Reduce timer
            delayToCloseModal--; // Strangely, this works really fine!
        }
        else {

            // Stop checking timer
            clearInterval(checkTimer);

            // Close Modal

        }
    }
}

“计时器”系统运行良好,模态在打开后5秒钟自动关闭,但是如果在模态已经打开时再次调用该函数,则不会将打开计时器重置为5。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法! (它可能是“自制的”,但是可以用)

我创建了一个布尔变量来启用或禁用setInterval的创建(如果已经在运行)。这是代码:

var delayToCloseModal = 5;
var timerRunning = false; // Set false as default value to allow the creation of the first timer

function AnimateModal() {

    // Each time this function is called
    delayToCloseModal = 5; 


    // If the modal isn't oppened
    if (document.getElementById("modal").style.opacity < 0.01) {
        // Open Modal
    }


    // Check if a timer is already running
    if (!timerRunning){
         var checkTimer = setInterval(CheckCounterDone, 1000); // Create new timer
         timerRunning = true; // Forbids to create another new timer
    }


    function CheckCounterDone() {
        if (delayToCloseModal > 0) {
            // Reduce timer
            delayToCloseModal--; 
        }
        else {

            // Stop checking timer
            clearInterval(checkTimer); // Delete the existing timer
            timerRunning = false; // Allow to recreate another timer

            // Close Modal

        }
    }
}

自最后一次调用该函数以来,模态现在保持打开状态5秒钟,并且即使您对该函数的调用发送了垃圾邮件,计时器也仅每秒减少一秒,并且在将延迟设置为时成功关闭0。

感谢回答您的任何人! :)