Javascript 写函数不读取计时器

Javascript 写函数不读取计时器,javascript,timer,Javascript,Timer,我想写一个定时器函数。在第一种状态下,计时器工作,但它执行的代码必须分别放在计时器、goActive/goInactive函数中。现在,我试图通过让goActive/goInactive返回其他代码块可以解释的小信号变量,将计时器与函数调用分开 现在我刚得到一个简单的模型。我希望goActive和goInactive返回1或-1,然后另一个函数,checktimer,应该在更新时将它们写入屏幕。但我还没有弄明白其中的逻辑。我对JS很陌生;我感谢所有帮助: var TimeoutID; var

我想写一个定时器函数。在第一种状态下,计时器工作,但它执行的代码必须分别放在计时器、goActive/goInactive函数中。现在,我试图通过让
goActive/goInactive
返回其他代码块可以解释的小信号变量,将计时器与函数调用分开

现在我刚得到一个简单的模型。我希望
goActive
goInactive
返回1或-1,然后另一个函数,
checktimer
,应该在更新时将它们写入屏幕。但我还没有弄明白其中的逻辑。我对JS很陌生;我感谢所有帮助:

var TimeoutID;
var timerstatus=0;
函数inputdetect(){
//将事件处理程序附加到指定的事件
//将事件作为字符串、要运行的函数和可选布尔值
//指示事件何时发生
//这些都是假的,所以事件“冒泡”
addEventListener(“mousemove”,resetTimer,false);
这个.addEventListener(“mousedown”,resetTimer,false);
此.addEventListener(“鼠标滚轮”,重置计时器,false);
此.addEventListener(“按键”,重置计时器,错误);
此.addEventListener(“touchmove”,resetTimer,false);
这个.addEventListener(“DOMmousescroll”,resetTimer,false);
此.addEventListener(“MSpointermove”,resetTimer,false);
startTimer();
}
inputdetect();
函数startTimer(){
//在调用inactive之前等待两秒钟
TimeoutID=window.setTimeout(goInactive,2000);//是否需要获取window变量??
}
功能重置计时器(e){
clearTimeout(TimeoutID);
目的性();
}
函数goActive(){
//当UI不空闲时会发生什么
$('#hi').text(“UI不是空闲的。”);
timerstatus=1;
$('#var').text(timerstatus);
startTimer();
返回时间状态;
}
函数goInactive(){
$('#hi').text(“UI处于空闲状态”);
timerstatus=-1;
$('#var').text(timerstatus);
返回时间状态;
//在UI空闲时替换光标
//这部分不行
}
功能检查计时器(timerstatus){
$('ct').text(timerstatus);
}
$(文档).ready(函数(){
设置间隔(检查计时器(timerstatus),2000年);
});

检查计时器更新是否正常:

你好

计时器状态为:

这是不正确的

window.setInterval(checktimer(timerstatus), 2000);
您需要传递函数,而不是调用函数

因为
timerstatus
是一个全局变量,它已经被所有函数共享,所以您不需要传递和返回它。所有的功能都可以使用它

所以只需将
checktimer
传递到
setInterval

window.setInterval(checktimer, 2000);
去掉所有
返回的timerstatus行,并删除
checktimer
的参数:

function checktimer() {
  $('#ct').text(timerstatus);
}

我不知道这是否符合您的最终要求,但它确实更正了代码。

在代码段中,它似乎工作正常。。。它输出:
check timer update goes:0 | UI未空闲。|计时器状态为:1
。。。当空闲2秒时,情况会发生变化。。。想要的输出应该是什么样子?是的,在这里似乎也能正常工作。这里有一个可以使用的JSFIDLE:只需将鼠标移动到结果部分,即可看到它的实际操作。