我做了一些研究,发现了繁忙的等待解决方案。在通过JQuery获取keypress事件之前,我不希望处理器在脚本中执行循环。
我怎样才能拉出像sleepUntilKeyPress()这样的函数,这是一个像C语言中的sleep()函数,而不是等待某个特定的时间等待按键?
答案 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
}
};