我正在尝试设置一个计时器以关闭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。
答案 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。
感谢回答您的任何人! :)