按下切换按钮时执行超时功能

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

Live Example

你的 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)

示例:https://jsfiddle.net/jfefL4oo/1/