我正在jquery的无限循环内运行一个函数。我想按退出键时退出循环。我做不到。我的循环无限运行。以下是我到目前为止所做的事情:
var playLoop = function(){
var myVar;
var continueLoop = 1;
while(continueLoop === 1){
$(document).on("keyup",function(e){
if(e.key==="Escape"){
continueLoop = 0;
}
myVar = setInterval(addition,1000);
});
}
}
我想停止在循环内运行函数,即最终在按下“转义”键时循环。我想念什么?我该怎么办?
答案 0 :(得分:2)
您需要使用.setTimeout
,一旦您识别出按了转义键,就可以用.clearTimeout
取消。下面的示例有效。
让我知道您是否还需要其他东西。
// Start your playLoop after document is ready
$(document).ready(function() {
playLoop();
});
function playLoop() {
// Append a dot so you know it's working
$(".dots").append(".");
// Set a new timeout to count down
playLoopCountdown = setTimeout(playLoop, 1000);
}
// Attach escape key cancel
$(document).on("keyup", function(e) {
if (e.key === "Escape") {
// Stop playLoop
clearTimeout(playLoopCountdown);
// Tell user the timeout has been stopped
$(".dots").append("STOPPED");
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>You need to click within this iframe for the escape keypress to be registered.</p>
<div class="dots"></div>
答案 1 :(得分:1)
您不能那样做。如果将主UI线程与无限循环绑定在一起,则该线程无法处理其任务队列中的任务。事件(例如按键)作为任务在任务队列中传递。
分别:on
注册事件处理程序。您只需<一次>注册处理程序即可。
如果在处理事件的同时还需要“循环”,则需要设置一系列异步操作(setTimeout
,setInterval
,...)。