Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用javascript函数后延迟的最佳方法_Javascript_Jquery - Fatal编程技术网

调用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; }; 我做错了什么? 我怎样才能做到这一点 如

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

当我调用下面的函数时,所有函数都被相应地调用,彼此之间没有延迟

$(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") */