function init() {
//$.ajax({url: blah-blah-blah...});
window.myTimer = setTimeout(init, 1000);
return;
}
我的init();
循环正在运行,我希望在我的窗口对象被更改(调整大小,移动等等)时清除它。
当我完成此操作时,我希望能够调用类似的内容:window.addEventListener('idle', function() { if (!window.myTimer) { init(); } });
我认为通过以下方式恢复是安全的:
window.addEventListener('mouseup', function() { if (!window.myTimer) { init(); });
onchange
事件,当事情发生变化时,事件就会发生。
有什么想法吗?
答案 0 :(得分:0)
所以在快速阅读之后,花点时间对它进行全面测试;这是我对df
函数(MDN Reference)的解释的基础知识。
requestIdleCallback
/* Global Variable Declarations */
window.myTimer = null;
window.counter = 0;
/* END Global Variable Declarations */
function init() {
/* My Custom checking code here */
document.getElementById('counter').innerHTML = window.counter+"";
console.log(window.counter);
window.counter += 1;
/* End My Custom checking code */
/* Non-Blocking Loop */
window.myTimer = setTimeout(init, 50);
/* End Non-Blocking Loop */
}
/* Event Listener Declarations */
window.addEventListener("change", function() { clearInterval(window.myTimer); window.myTimer = null; });
window.requestIdleCallback(function() { if (!window.myTimer) { init(); } });
/* END Event Listener Declarations */
我在Chrome中测试了发布的代码以及我的jQuery ajax代码,这一切似乎都运行良好。
与试图捕获所有其他可能的事件状态相比,这是非常紧张的前进!
我在Edge中测试了以下解释,它看起来效果很好:
<div id="counter"></div>
function msDiff(timeStamp) {
var a = timeStamp;
var oMS = (a.getHours()*60*60*1000) + (a.getMinutes()*60*1000) + (a.getSeconds()*1000) + a.getMilliseconds();
var b = new Date();
var nMS = (b.getHours()*60*60*1000) + (b.getMinutes()*60*1000) + (b.getSeconds()*1000) + b.getMilliseconds();
return nMS - oMS;
}
/* Global Variable Declarations */
window.myTimer = null;
window.myPause = new Date();
window.counter = 0;
/* END Global Variable Declarations */
function init() {
/* My Custom checking code here */
document.getElementById('counter').innerHTML = window.counter+"";
console.log(window.counter);
window.counter += 1;
/* End My Custom checking code */
/* Non-Blocking Loop */
window.myTimer = setTimeout(init, 50);
/* End Non-Blocking Loop */
}
function myPauseLoop() {
if (msDiff(window.myPause) > 500) {
init();
return;
} else {
setTimeout(myPauseLoop, 500);
}
}
/* Event Listener Declarations */
window.addEventListener("change", function() {
clearInterval(window.myTimer);
window.myTimer = null;
window.myPause = new Date();
});
/* End Event Listener Declarations */
init();