调用javascript函数后延迟的最佳方法
我正在使用jquery调用一些javascript函数,它们之间有一个延迟。调用javascript函数后延迟的最佳方法,javascript,jquery,Javascript,Jquery,我正在使用jquery调用一些javascript函数,它们之间有一个延迟。 我也在用 当我调用下面的函数时,所有函数都被相应地调用,彼此之间没有延迟 $(this) .call(f1) .wait(5000) .call(f2) .wait(5000) .call(f3); 这里调用函数像我一样调用一些函数 $.fn.call = function (f) { if (f) f(); return this; }; 我做错了什么? 我怎样才能做到这一点 如
我也在用 当我调用下面的函数时,所有函数都被相应地调用,彼此之间没有延迟
$(this)
.call(f1)
.wait(5000)
.call(f2)
.wait(5000)
.call(f3);
这里调用函数像我一样调用一些函数
$.fn.call = function (f) {
if (f)
f();
return this;
};
我做错了什么?
我怎样才能做到这一点如果您想每5秒调用一个函数,请使用
setTimeout(function(){f1},5000);
setTimeout(function(){f2},10000);
setTimeout(function(){f2},15000);
如果要在最后一个函数终止后5秒调用每个函数,请使用
setTimeout(function(){f1;setTimeout(function(){f2;setTimeout(function(){f3},5000);},5000);},5000);
你不需要从那本食谱中找到wait()
;是内置的,似乎具有相同的功能。但这两个函数都涉及到向jQuery的内部效果队列中添加一些内容,然后在超时过期后将其删除,也就是说,它不是一个sleep语句,因此它不会在返回之前等待
如果要使用delay()
或wait()
,则应使用call()
将函数排队。只是素描,但有点像:
$.fn.call = function(f) {
if (f) {
$(this).queue(function() {
f();
$(this).dequeue();
}
}
return this;
}
然后,我希望您的代码能按您所希望的方式工作。下面是一个按顺序调用函数数组的函数:
$.fn.callFn = function(fns, delay) {
var fn, that = this;
if(fns.length > 0){
fn = fns.shift()
fn && fn();
setTimeout(function(){
that.callFn(fns, delay);
}, delay);
}
return this;
};
你会这样称呼它:
$(this).callFn([f1, f2, f3], 2000);
这里到底有什么不起作用?函数是一个接一个地调用的,它们之间没有延迟SetTimeout()将调用每个函数一次。要重复调用函数,请使用setInterval()。有没有办法在jquery中实现这一点?我的意思是,就像我做的,你为什么需要jQuery?jQuery只是一个javascript框架,可以使用它。我知道jQuery是什么。为了以后使用,我会让动画处理这段代码,这就是为什么我应该坚持使用jQuery。你的实现也是正确的+1I会让动画处理我的代码($(this)。call(f1)。wait(5000)。call(f2)。wait(5000)。animate(…)。wait(1000)。call(f3);),这就是为什么我应该坚持使用jquery的原因。就使用wait/delay而言,它只是一个示意图,让您朝着正确的方向前进。我实际上还没有试过,所以可能需要一些调整。请仔细阅读queue()的文档,并尝试它们的一些示例。
$('#box').slideUp(300).delay(800).fadeIn(400);
/* .delay = wait time = 800 (this means it will wait 800/1000 of a second/ "1000 = 1 second") */