按下切换按钮时执行超时功能
Do function with timeout while togglebutton is pressed
我想要 运行 一个超时为 2000 毫秒的函数。当按下 toggleButton
时,函数应该只是 运行。
当我 运行 这个函数时,我的 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>
JavaScript
document.getElementById('my_button').addEventListener('click', function () {
setTimeout(function () {
alert('Clicked!');
}, 2000);
});
JSFiddle
你的 CPU 爆炸是因为你再次创建超时,当按下按钮时,在你的循环中一次又一次地非常快。如果你想每 2 秒 运行 你的函数:
- 您应该测试按钮是否被按下。
- 使用
setInterval
- 在
setInterval
里面,检查按钮是否仍然被按下,如果没有,clearInterval
https://www.w3schools.com/jsref/met_win_setinterval.asp
如果您只想在 2 秒后激活您的功能,请在 if.
中使用 setTimeout
如果能捕捉到onPress 和onRelease 事件,做下面的就更好了
onPress
var myTimeout = setTimeout( ... , 2000 )
onRelease
clearTimeout(myTimeout)
我想要 运行 一个超时为 2000 毫秒的函数。当按下 toggleButton
时,函数应该只是 运行。
当我 运行 这个函数时,我的 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>
JavaScript
document.getElementById('my_button').addEventListener('click', function () {
setTimeout(function () {
alert('Clicked!');
}, 2000);
});
JSFiddle
你的 CPU 爆炸是因为你再次创建超时,当按下按钮时,在你的循环中一次又一次地非常快。如果你想每 2 秒 运行 你的函数:
- 您应该测试按钮是否被按下。
- 使用
setInterval
- 在
setInterval
里面,检查按钮是否仍然被按下,如果没有,clearInterval
https://www.w3schools.com/jsref/met_win_setinterval.asp
如果您只想在 2 秒后激活您的功能,请在 if.
中使用setTimeout
如果能捕捉到onPress 和onRelease 事件,做下面的就更好了
onPress
var myTimeout = setTimeout( ... , 2000 )
onRelease
clearTimeout(myTimeout)