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。
解决方案
我找到了解决问题的方法!(它可能是“自制的”,但它有效)
我创建了一个布尔变量来启用或禁用 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 后成功关闭。
感谢任何回答您的帮助的人!:)
推荐阅读
- python - 从另一个文件导入时,Python Pygame 代码运行非常慢
- c++ - 在 [C++] 中键入 0 之前的 10 个数字的总和
- python - sklearn 已安装但无法导入
- node.js - 如何创建创建路线以在猫鼬中创建数组列表
- html - 如何在 HTML 代码中显示来自图像 URI 的图像以响应 ANDROID 的原生反应?
- c# - 如何使用 streamwriter/textwriter/File 写入文件?
- node.js - 使用 NodeJS 创建 Angular 项目的问题
- c# - 关闭按钮不使用 Paddle SDK 在 c# 中关闭整个应用程序
- html - 图像未出现 Apex Oracle
- bash - 每当日期格式约束与日期格式列不匹配时,如何使用 awk 按日期列过滤 csv 文件?