Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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
jquery中的wait()或sleep()函数?_Jquery - Fatal编程技术网

jquery中的wait()或sleep()函数?

jquery中的wait()或sleep()函数?,jquery,Jquery,我想添加一个类,请等待2秒钟,然后添加另一个类 .addClass("load").wait(2sec).addClass("done"); 有什么办法吗?有一个函数,但它是额外的: 此小片段允许您等待: $.fn.wait = function(time, type) { time = time || 1000; type = type || "fx"; return this.queue(type, function() { var self =

我想添加一个类,请等待2秒钟,然后添加另一个类

.addClass("load").wait(2sec).addClass("done");

有什么办法吗?

有一个函数,但它是额外的:

此小片段允许您等待:

$.fn.wait = function(time, type) {
    time = time || 1000;
    type = type || "fx";
    return this.queue(type, function() {
        var self = this;
        setTimeout(function() {
            $(self).dequeue();
        }, time);
    });
};
那就是
.delay()


如果你正在做AJAX的事情,你真的不应该只是自动写“完成”,你应该等待一个响应,看看它是否真的完成了。

setTimeout将在一段时间延迟后执行一些代码(以毫秒为单位)。但是,需要注意的一点是:由于javascript的性质,在设置计时器后,其余代码将继续运行:

$('#someid').addClass("load");

setTimeout(function(){
  $('#someid').addClass("done");
}, 2000);

// Any code here will execute immediately after the 'load' class is added to the element.

认识到这是一个老问题,但我写了一个插件来解决这个问题,有人可能会觉得有用

允许您执行以下操作:

$('#myElement').addClass('load').wait(2000).addClass('done');
delay()无法完成此任务。delay()的问题在于它是动画系统的一部分,只适用于动画队列

如果要在执行动画以外的内容之前等待,该怎么办

使用以下命令:

window.setTimeout(function(){
                 // do whatever you want to do     
                  }, 600);
发生了什么?:在这种情况下,它会等待600毫秒,然后执行花括号中指定的代码

这帮了我很大的忙,一旦我弄明白了,希望它也能帮助你

重要提示:“window.setTimeout”是异步发生的。在编写代码时请记住这一点

您可以使用该功能。
这就是你想要的:

.addClass("load").delay(2000).addClass("done");

xml4jQuery插件提供了sleep(ms,callback)方法。剩余的链将在睡眠期后执行

$(“.toFill”).html(“单击此处”)
.$on('点击')
.html('正在加载…')
.睡眠(1000)
.html('done')
.toggleClass(“可单击”)
.prepend('仍然可以单击
')
.toFill{边框:淡绿色虚线2px;边框半径:1em;显示:内联块;填充:1em;}
.可点击{光标:指针;边框颜色:蓝色;}

我在互联网上找到了一个名为sleep function的函数,不知道是谁制作的。给你

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

sleep(2000);
函数睡眠(毫秒){
var start=new Date().getTime();
对于(变量i=0;i<1e7;i++){
如果((新日期().getTime()-start)>毫秒){
打破
}
}
}
睡眠(2000年);

另外,您希望
.removeClass('load')
否则您添加的两个类都将加载并完成,这可能是不希望的。如果您确实在等待一个异步操作完成,那么最好的办法是在它完成并且成功时执行.addClass。addClass('error')可能是一个理想的方法。jQUery“delay()”函数绝不提供任何类似于通用“wait”功能的功能。它是动画系统的一部分,仅适用于动画队列。该函数总是立即返回,并且执行过程不会暂停。目前这是一个糟糕的解决方案,因为它失去了jquery控制动画的优势,如.stop()。更好的解决方案是.delay()@user123blahblah。。。这是问题的正确解决方案(与动画无关)。延迟不会将jackbean放在动画队列之外。无论谁推翻了你的错误评论,都是在误导自己。