如何在短暂延迟后重新开始间隔 jquery
How to restart interval after a short delay jquery
我正在尝试在文档准备好时重复一个时间间隔。间隔每 3 秒重复一次,但我希望它暂停 onmousemove 事件 5 秒,然后重新启动间隔。
到目前为止,这是我的代码:
$(document).ready(function(){
var myInterval = setInterval(alertMe, 3000);
function alertMe(){
alert('jj');
}
$(document).mousemove(function(event){
// I want delay 5 seconds and then initialize myInterval again
setTimeout(function(){}, 5000);
clearInterval(myInterval);
setInterval(alertMe, 3000);
});
});
参考答案一:JavaScript: How to get setInterval() to start now?
参考答案2:How to wait 5 seconds with jQuery?
您可以尝试下面的代码,只需对您的代码进行少量修改。
您可以使用 mousedown
事件处理程序并在其中使用 clearinterval 并在 5 秒后使用 settimeout
设置新的间隔
$(document).ready(function(){
var myInterval = setInterval(alertMe, 3000);
var myTimeout;
function alertMe(){
alert('jj');
}
$(document).mousedown(function(event){
clearInterval(myInterval); // clear interval as soon as mouse over
clearTimeout(myTimeout);
// I want delay 5 seconds and then initialize myInterval again
myTimeout = setTimeout(function(){
myInterval = setInterval(alertMe, 3000); // set interval after 5 seconds
}, 5000);
});
});
首先请注意,您的问题说您想在 mousedown
停止间隔,但您的代码使用 mousemove
。
其次,不要使用 alert()
来测试它,因为它会阻止 UI 更新。请改用 console.log()
。
最后,为了解决这个问题,在鼠标事件中使用setTimeout()
调用来延迟间隔的重新启动。试试这个:
$(document).ready(function() {
function logMe() {
console.log('jj');
}
function startInterval() {
return setInterval(logMe, 3000);
}
var interval = startInterval(), timeout;
$(document).mousemove(function(event) {
clearInterval(interval);
clearTimeout(timeout);
timeout = setTimeout(function() {
interval = startInterval();
}, 2000); // note 2000 delay here, as it compounds with the 3000 delay on the
// interval to make a 5000ms delay
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我正在尝试在文档准备好时重复一个时间间隔。间隔每 3 秒重复一次,但我希望它暂停 onmousemove 事件 5 秒,然后重新启动间隔。
到目前为止,这是我的代码:
$(document).ready(function(){
var myInterval = setInterval(alertMe, 3000);
function alertMe(){
alert('jj');
}
$(document).mousemove(function(event){
// I want delay 5 seconds and then initialize myInterval again
setTimeout(function(){}, 5000);
clearInterval(myInterval);
setInterval(alertMe, 3000);
});
});
参考答案一:JavaScript: How to get setInterval() to start now?
参考答案2:How to wait 5 seconds with jQuery?
您可以尝试下面的代码,只需对您的代码进行少量修改。
您可以使用 mousedown
事件处理程序并在其中使用 clearinterval 并在 5 秒后使用 settimeout
$(document).ready(function(){
var myInterval = setInterval(alertMe, 3000);
var myTimeout;
function alertMe(){
alert('jj');
}
$(document).mousedown(function(event){
clearInterval(myInterval); // clear interval as soon as mouse over
clearTimeout(myTimeout);
// I want delay 5 seconds and then initialize myInterval again
myTimeout = setTimeout(function(){
myInterval = setInterval(alertMe, 3000); // set interval after 5 seconds
}, 5000);
});
});
首先请注意,您的问题说您想在 mousedown
停止间隔,但您的代码使用 mousemove
。
其次,不要使用 alert()
来测试它,因为它会阻止 UI 更新。请改用 console.log()
。
最后,为了解决这个问题,在鼠标事件中使用setTimeout()
调用来延迟间隔的重新启动。试试这个:
$(document).ready(function() {
function logMe() {
console.log('jj');
}
function startInterval() {
return setInterval(logMe, 3000);
}
var interval = startInterval(), timeout;
$(document).mousemove(function(event) {
clearInterval(interval);
clearTimeout(timeout);
timeout = setTimeout(function() {
interval = startInterval();
}, 2000); // note 2000 delay here, as it compounds with the 3000 delay on the
// interval to make a 5000ms delay
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>