Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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函数排队,以便在设定的时间后执行。这不会暂停其他函数的执行,只是链中的后续函数。也许我设想的一个例子可以说明: $('#alert') .show() .wait(5000) // <-- this bit .hide() ; $(“#警报”) .show() .等等(5000)/你不能这么做,而且你可能不想这么做。虽然它看起来确实很漂亮,但是Javascript中没有任何机制允许您在不循环“等待”直到时间

我想知道的是,是否有一种很好的方法可以将jQuery函数排队,以便在设定的时间后执行。这不会暂停其他函数的执行,只是链中的后续函数。也许我设想的一个例子可以说明:

$('#alert')
    .show()
    .wait(5000)    // <-- this bit
    .hide()
;
$(“#警报”)
.show()

.等等(5000)/你不能这么做,而且你可能不想这么做。虽然它看起来确实很漂亮,但是Javascript中没有任何机制允许您在不循环“等待”直到时间过去的情况下执行该操作。您当然可以这样做,但您可能会严重降低浏览器性能,如果您的超时时间超过几秒钟,浏览器将向用户显示一条警告,表明您的javascript似乎被卡住了

正确的方法是超时:

var el = $('#alert');
el.show()
setTimeout(function() { el.hide() }, 5000);
您的另一个选择是扩展jquery,为您想要延迟的操作添加效果:

jQuery.fn.extend({
    delayedHide: function(time) {
        var self = this;
        setTimeout(function() { self.hide(); }, time);
    }
});

$('#alert')
    .show()
    .delayedHide(5000)
;
您还可以使用类似于setTimeout的方法扩展jquery:

jQuery.fn.extend({
    delayThis: function(fn, time, args) {
        var self = this;
        setTimeout(function() { jQuery.fn[fn].apply(self, args); }, time);
    }
});

$('#alert')
    .show()
    .delayThis('hide', 5000)
;
或使用args调用数组中的pass参数:

$('#alert')
    .show()
    .delayThis('css', 5000, [ 'display', 'none' ])
;
它正是您所需要的:

$('#element').fadeOut({
    speed: 'fast',
    preDelay: 5000
});

嗨,普雷斯塔尔,谢谢你的评论-我对这个问题进行了轻微的编辑,以澄清我不希望它在这么长的时间内“挂起”浏览器。