Javascript睡眠直到按下键

时间:2016-02-18 17:26:06

标签: javascript jquery

我做了一些研究,发现了繁忙的等待解决方案。在通过JQuery获取keypress事件之前,我不希望处理器在脚本中执行循环。

我怎样才能拉出像sleepUntilKeyPress()这样的函数,这是一个像C语言中的sleep()函数,而不是等待某个特定的时间等待按键?

2 个答案:

答案 0 :(得分:2)

你在倒退。你的功能不应该等待按键执行某些操作,只要按下按键,该功能就应该执行某些操作。在关键回调可以达到的范围内维护您的数据状态,并在按键时更新您的状态。

你想说:

while(!keypress){
    dontDoSomething();
}

你应该做更多的事情:

on(keypress, doSomething);

考虑这个想法:

var counter, ispressed, el;

// Bad
counter = 0;
ispressed = false;
el = document.getElementById("element");

el.addEventListener("mousedown", function () {
    ispressed = true;
});

el.addEventListener("mouseup", function () {
    ispressed = false;
});

while (1) {
    if (ispressed) {
        counter += 1;
    }
}

// Better
el.addEventListener("click", function () {
    counter += 1;
});

让我们忘记while将锁定程序的事实,(我甚至不认为事件监听器会触发,我很确定DOM会锁定),你问的是你的程序浪费时间不断检查你是否按下了按钮。不要这样做,让浏览器使用内置的addEventListener()检查您,并按照您发现已按下按钮时执行的操作。

答案 1 :(得分:-2)

var interval = window.setInterval(function () {
    // hang around and do nothing
}, 1000);

document.onkeypress = function () {
    if (/* some specific character was pressed */) {
        window.clearInterval(interval);

        // do some other thing, other thing
    }
};