调用javascript函数后放置延迟的最佳方法

时间:2010-10-07 08:07:45

标签: javascript jquery

我正在使用jquery调用一些javascript函数,它们之间有延迟 我也在使用Jquery Wait

当我调用下面的函数时,所有函数都被分别调用,彼此之间没有延迟。

$(this)
.call(f1)
.wait(5000)
.call(f2)
.wait(5000)
.call(f3);

这里调用函数调用了一些函数

$.fn.call = function (f) {
    if (f)
        f();

    return this;
};

我做错了什么? 我怎样才能实现这样的目标?
谢谢

4 个答案:

答案 0 :(得分:6)

如果您想每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);

答案 1 :(得分:2)

您不需要该食谱中的wait(); delay()是内置的,似乎具有相同的功能。但是任何一个函数都需要在jQuery的内部效果队列中添加一些东西,然后在超时到期后将其删除,即它不是睡眠语句,所以它不会在返回之前等待。

如果您想使用delay()wait(),则应call()使用queue()将该功能排入队列。只是草绘,但有点像:

$.fn.call = function(f) {
    if (f) {
        $(this).queue(function() {
            f();
            $(this).dequeue();
        }
    }
    return this;
}

然后我希望你的代码按照你想要的方式工作。

答案 2 :(得分:1)

这是一个按顺序调用函数数组的函数:

$.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);

答案 3 :(得分:1)

$('#box').slideUp(300).delay(800).fadeIn(400);

/* .delay = wait time = 800 (this means it will wait 800/1000 of a second/ "1000 = 1 second") */