Javascript 按下togglebutton时执行超时功能
我想运行一个超时为2000毫秒的函数。该函数应该在按下Javascript 按下togglebutton时执行超时功能,javascript,timeout,do-while,togglebutton,Javascript,Timeout,Do While,Togglebutton,我想运行一个超时为2000毫秒的函数。该函数应该在按下切换按钮时运行 当我运行此函数时,我的CPU会爆炸: do { setTimeout(function () { me.pushMockData(); }, 2000); } while (liveButton.getPressed() != false); 这是因为您一直在while循环中调用setTimeout函数 var timeout; if (liveButton.getPressed()) { if (
切换按钮时运行
当我运行此函数时,我的CPU会爆炸:
do {
setTimeout(function () {
me.pushMockData();
}, 2000);
}
while (liveButton.getPressed() != false);
这是因为您一直在while循环中调用setTimeout
函数
var timeout;
if (liveButton.getPressed())
{
if (typeof timeout !== 'undefined') {
timeout = setTimeout(function () {
me.pushMockData();
}, 2000);
} else {
clearTimeout(timeout);
}
}
你完全搞错了,保持简单,在按钮上附加一个事件监听器,然后调用setTimeout
HTML
<button id="my_button">Click Me</button>
JSFiddle
按下按钮时,您的CPU会爆炸,因为您在循环中一次又一次地创建超时,速度非常快。如果要每2秒钟运行一次函数:
- 你应该测试一下按钮是否被按下
- 使用
setInterval
- 在
setInterval
内,检查按钮是否仍被按下,如果未按下,clearInterval
如果您只想在2秒钟后激活功能,请在If中使用setTimeout
。如果您可以捕获onPress和onRelease事件,最好执行以下操作
onPress
var myTimeout = setTimeout( ... , 2000 )
onRelease
clearTimeout(myTimeout)
示例:为什么要使用do/while循环?只需在超时功能中选中getPressed
。否则,您将创建一个非常大的超时函数堆栈。当按下超时函数时,您能捕获该事件吗?如果是这样,在“onPress”事件之后设置新的超时,并在“onRelease”事件上清除它(使用clearTimeout)。是的,这样更好,你是对的。。但这并不能解决问题。我的CPU像以前一样爆炸了。我想,超时时间不太合适。它在没有2秒超时的情况下连续启动pushMockData函数。@MarvinRügheimer我添加了一个示例,如果您不介意检查的话。我看到您找到了解决方案,但无论如何,我希望它会有所帮助使用setInterval
似乎是个坏主意,因为它有加速的趋势。另外,如果可以使用setTimeout
的话,似乎要做更多的工作。你的意思是:setInterval(函数(){if(liveButton.getPressed()!=false){me.pushMockData();}else{clearInterval();},2000);可能是这样的:var interval=setInterval(函数(){if(liveButton.getPressed()!=false){me.pushMockData();}else{clearInterval(interval);},2000)
在liveButton的onclick侦听器中,仅当您需要每2秒运行一次代码时,如果不需要,请在if语句中使用setTimeoout。不客气:)请尝试澄清您的问题,因为不清楚您是否需要每2秒运行一次,我想使用代码^^^会更好,谢谢。但是,在再次按下按钮之前,如何运行超时功能?
onPress
var myTimeout = setTimeout( ... , 2000 )
onRelease
clearTimeout(myTimeout)