JavaScript:阻止 setInterval 函数从 运行 直到按钮被点击
JavaScript: Prevent setInterval Function From Running Until Button is Clicked
JS 新手。我想在我的页面上添加一个按钮,上面写着“开始游戏”。单击后,倒计时功能开始执行,每秒将按钮上的文本从 10 更改为 0,此时按钮会说“时间到了!”
我已经使用 setInterval
方法让倒数计时器开始工作,但它会在页面加载后立即启动 运行ning(下面的 运行 代码片段可以查看实际效果).
我试图阻止它 运行ning 直到按钮被点击。这是我的 html 按钮(带有 属性 "onclick="startTimer()"
)和 JS:
var timeleft = 10
var gameTimer = setInterval(startTimer, 1000);
function startTimer () {
if (timeleft <= 0) {
clearInterval(gameTimer);
document.getElementById("countdown").innerHTML = "Time's Up!";
} else {
document.getElementById("countdown").innerHTML = timeleft;
}
timeleft -=1;
};
<button id="countdown" onclick="startTimer()">Start Game</button>
我尝试添加一个 preventDefault
来阻止它在加载时 运行ning,但没有任何改变。我怎样才能阻止函数 运行ning 直到它听到点击事件?
此处答案的核心是将 setInterval()
的调用移动到单击按钮时调用的函数中。
但是,您确实应该稍微重构这段代码,以提高可读性和功能。例如,我希望 startTimer()
完全按照它所说的去做 - start 计时器,仅此而已。然而,这个函数似乎处理了 timeleft
.
的递减
上面评论中的建议目前可能没有意义的原因是你不想每次都调用setInterval()
来减少timeleft
。将这个功能分解成离散的功能,让自己省去头痛。
var timeleft = 10
var gameTimer;
function startTimer() {
gameTimer = setInterval(tick, 1000);
};
function tick() {
if (timeleft <= 0) {
clearInterval(gameTimer);
document.getElementById("countdown").innerHTML = "Time's Up!";
} else {
document.getElementById("countdown").innerHTML = timeleft;
}
timeleft -= 1;
}
<button id="countdown" onclick="startTimer()">Start Game</button>
JS 新手。我想在我的页面上添加一个按钮,上面写着“开始游戏”。单击后,倒计时功能开始执行,每秒将按钮上的文本从 10 更改为 0,此时按钮会说“时间到了!”
我已经使用 setInterval
方法让倒数计时器开始工作,但它会在页面加载后立即启动 运行ning(下面的 运行 代码片段可以查看实际效果).
我试图阻止它 运行ning 直到按钮被点击。这是我的 html 按钮(带有 属性 "onclick="startTimer()"
)和 JS:
var timeleft = 10
var gameTimer = setInterval(startTimer, 1000);
function startTimer () {
if (timeleft <= 0) {
clearInterval(gameTimer);
document.getElementById("countdown").innerHTML = "Time's Up!";
} else {
document.getElementById("countdown").innerHTML = timeleft;
}
timeleft -=1;
};
<button id="countdown" onclick="startTimer()">Start Game</button>
我尝试添加一个 preventDefault
来阻止它在加载时 运行ning,但没有任何改变。我怎样才能阻止函数 运行ning 直到它听到点击事件?
此处答案的核心是将 setInterval()
的调用移动到单击按钮时调用的函数中。
但是,您确实应该稍微重构这段代码,以提高可读性和功能。例如,我希望 startTimer()
完全按照它所说的去做 - start 计时器,仅此而已。然而,这个函数似乎处理了 timeleft
.
上面评论中的建议目前可能没有意义的原因是你不想每次都调用setInterval()
来减少timeleft
。将这个功能分解成离散的功能,让自己省去头痛。
var timeleft = 10
var gameTimer;
function startTimer() {
gameTimer = setInterval(tick, 1000);
};
function tick() {
if (timeleft <= 0) {
clearInterval(gameTimer);
document.getElementById("countdown").innerHTML = "Time's Up!";
} else {
document.getElementById("countdown").innerHTML = timeleft;
}
timeleft -= 1;
}
<button id="countdown" onclick="startTimer()">Start Game</button>