Gol*_*wby 8 javascript jquery settimeout
我正在使用debouncing来在超时后使用settimeout执行事件.我遇到的问题是,其他javascript事件期望这些事件同步发生.由于它们现在在超时后执行,我希望能够通过其他javascript事件过早地触发它们(因此那些需要它们的事件不会失败).
Anywhom,如果我这样做:
timeout = setTimeout(function() { alert('hi'); }, 10000);
Run Code Online (Sandbox Code Playgroud)
,我希望在10秒钟之前发生这种情况,我该怎么做?
如有必要,解决方案可能涉及jquery.谢谢!
编辑:是否可以通过访问超时对象来执行此操作?
所以,如果你做出任何延迟它自己功能的事情:
function sayHi() {
alert('hi');
}
Run Code Online (Sandbox Code Playgroud)
您可以使用超时和常规函数调用:
var timeout = setTimeout(sayHi, 10000); // say hi after 10 seconds
Run Code Online (Sandbox Code Playgroud)
或者在超时到期之前调用它,只需在需要时调用该函数:
sayHi();
Run Code Online (Sandbox Code Playgroud)
我在这里走在正确的轨道上吗?如果您需要取消超时,请调用clearTimeout()您的timeout变量.
if (timeout)
clearTimeout(timeout);
Run Code Online (Sandbox Code Playgroud)
您无法使用标准跟踪它setTimeout,但Javascript允许您根据需要增强功能.
例如,您可以拥有自己的增强功能setTimeout:
var _setTimeout = window.setTimeout;
var timeouts = [];
window.setTimeout = function(fn, ms) {
var id = _setTimeout(fn, ms);
timeouts[id] = fn;
return id;
};
window.premature = function(id) {
var fn = timeouts[id];
if (fn) {
clearTimeout(id);
if (fn instanceof String) {
eval(fn);
} else {
fn()
}
}
};
function printDate(str) {
$("body").append("<p>" + str + ". " + new Date() + "</p>");
}
$(function() {
var id1 = setTimeout(function() { printDate("id1"); }, 10000);
var id2 = setTimeout(function() { printDate("id2"); }, 10000);
printDate("first one");
// just to demonstrate that the string version works too
setTimeout("window.premature(" + id1 +")", 5000);
});
Run Code Online (Sandbox Code Playgroud)
请注意,这个简单的黑客在超时发生时没有考虑清除使用过的id,但它只是为了表明你可以在Javascript中做这种事情,如果你真的需要它.