这里简单的问题我似乎无法找到答案:一旦设置了setTimeout
,有没有办法看看它是否仍然,好吧,设置?
if (!Timer)
{
Timer = setTimeout(DoThis,60000);
}
据我所知,当你clearTimeout
时,变量保持在最后一个值。 console.log
我只是将Timer
显示为'12',无论是否已设置或清除超时。我是否也必须将变量置零,或者使用其他变量作为布尔说法,是的,我已设置此计时器?当然有一种方法可以检查超时是否仍在运行......对吗?我不需要知道剩下多长时间,只要它还在运行。
答案 0 :(得分:50)
我的工作是:
var timer = null;
if (timer != null) {
window.clearTimeout(timer);
timer = null;
}
else {
timer = window.setTimeout(yourFunction, 0);
}
答案 1 :(得分:47)
除了启动或停止计时器之外,无论如何都无法与计时器进行交互。我通常在超时处理程序中清空timer变量,而不是使用标志来指示计时器未运行。有关计时器如何工作的W3Schools有一个很好的描述。在他们的例子中,他们使用标志变量。
您看到的值是当前计时器的handle,当您清除(停止)它时使用它。
答案 2 :(得分:4)
使用您的计时器设置另一个变量Timer_Started = true
。并且在调用计时器函数时将变量更改为false
:
// set 'Timer_Started' when you setTimeout
var Timer_Started = true;
var Timer = setTimeout(DoThis,60000);
function DoThis(){
// function DoThis actions
//note that timer is done.
Timer_Started = false;
}
function Check_If_My_Timer_Is_Done(){
if(Timer_Started){
alert("The timer must still be running.");
}else{
alert("The timer is DONE.");
}
}
答案 3 :(得分:4)
在启动计时器之前,无需检查现有计时器,只需检查clearTimout。
var timer;
var startTimer = function() {
clearTimout(timer);
timer = setTimeout(DoThis, 6000);
}
这将在开始新实例之前清除任何计时器。
答案 4 :(得分:1)
我知道这是一个necroposting但我认为仍然有人在寻找这个。
这是我使用的: 3个变量:
t
,因为..在日期对象中为下一个目标timerSys
seconds
毫秒阈值接下来我有一个带有1个变量的function timer
,该函数检查变量是否为真正的,如果是,他检查计时器是否已经在运行,如果是这样,则填充 global vars ,如果不是真正的, falsely ,则清除间隔并将global var timerSys
设置为 false ;
var t, timerSys, seconds;
function timer(s) {
if (s && typeof s === "number") {
if (typeof timerSys === "boolean" || typeof timerSys === "undefined") {
timerSys = setInterval(function() {
sys();
}, s);
t = new Date().setMilliseconds(s);
seconds = s;
}
} else {
clearInterval(timerSys);
timerSys = false;
}
return ((!timerSys) ? "0" : t)
}
function sys() {
t = new Date().setMilliseconds(seconds);
}
示例I
现在您可以在 sys function 中添加一行:
function sys() {
t = new Date().setMilliseconds(seconds);
console.log("Next execution: " + new Date(t));
//this is also the place where you put functions & code needed to happen when interval is triggerd
}
执行:
timer(5000);
在控制台中每隔5秒:
//output:: Next execution: Sun May 08 2016 11:01:05 GMT+0200 (Romance (zomertijd))
示例II
function sys() {
t = new Date().setMilliseconds(seconds);
console.log("Next execution: " + seconds/1000 + " seconds");
}
$(function() {
timer(5000);
});
在控制台中每隔5秒:
//output:: Next execution: 5 seconds
示例III
var t, timerSys, seconds;
function timer(s) {
if (s && typeof s === "number") {
if (typeof timerSys === "boolean" || typeof timerSys === "undefined") {
timerSys = setInterval(function() {
sys();
}, s);
t = new Date().setMilliseconds(s);
seconds = s;
}
} else {
clearInterval(timerSys);
timerSys = false;
}
return ((!timerSys) ? "0" : t)
}
function sys() {
t = new Date().setMilliseconds(seconds);
console.log("Next execution: " + seconds / 1000 + " seconds");
}
$(function() {
timer(5000);
$("button").on("click", function() {
$("span").text(t - new Date());
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Freebeer</button>
<span></span>
请注意,您可以低于0
答案 5 :(得分:1)
我通常会使计时器无效:
var alarm = setTimeout(wakeUpOneHourLater, 3600000);
function wakeUpOneHourLater() {
alarm = null; //stop alarm after sleeping for exactly one hour
}
//...
if (!alarm) {
console.log('Oops, waked up too early...Zzz...');
}
else {
console.log('Slept for at least one hour!');
}