Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 delay()不';行不通_Jquery - Fatal编程技术网

Jquery delay()不';行不通

Jquery delay()不';行不通,jquery,Jquery,我有以下JavaScript代码片段: $("#dashboard").addClass("standby").delay(3000).removeClass("standby"); $(".active").removeClass("active"); $("." + target).addClass("active"); $(".showDiv").removeClass("showDiv").addClass("hide"); $("#" + target).removeClass("hi

我有以下JavaScript代码片段:

$("#dashboard").addClass("standby").delay(3000).removeClass("standby");
$(".active").removeClass("active");
$("." + target).addClass("active");
$(".showDiv").removeClass("showDiv").addClass("hide");
$("#" + target).removeClass("hide").addClass("showDiv");
#dashboard
处于待机状态时,它应该处理所有这些CSS类更改。更改后,它应再次显示
#仪表板
。因此,我在添加和删除
standby
-类之间设置了
delay()
。为了看看它是否有效,我添加了3sek的持续时间太长

但它不会拖延!为什么不呢?我看不出来…

只对通过动画管道的动作有效,不会对像那样的即时原子操作的计时产生影响。为了延迟添加或删除类之类的操作,您可以使用

.delay()方法允许我们延迟队列中跟随它的函数的执行。它可以与标准效果队列或自定义队列一起使用

.delay()方法最适合在排队的jQuery效果之间进行延迟。例如,由于它的局限性,它没有提供一种取消延迟的方法。delay()不是JavaScript本机setTimeout函数的替代品,后者可能更适合某些用例

.delay()
只会延迟jQuery中的动画。 要设置实际延迟,您可能需要使用
setTimeout()


这将执行
中的代码。。。在3秒内完成任务…
(3000毫秒)

对于您正在尝试做的事情,您可能想看看CSS转换:


您仍然可以使用
.addClass()
,除非现在您的类将使用这些转换属性,并且您不需要.delay()。

通常我们需要在删除待机状态之前执行一些操作,因此我们在ajax回调中删除该类:

$("#dashboard").addClass("standby");
$.get('urltoget',function(data){
  if(data)
    $("#dashboard").removeClass("standby");
  else
    $("#dashboard").removeClass("standby").addClass('error');
})

延迟不会按您在以下线路上预期的方式工作:

$("#image1").delay(9000).attr("src", "image/image1.jpg");
$("#image1").delay(9000).attr("src", "image/image2.jpg");
它将立即运行属性更改。为什么?因为属性更改不是“动画”的一部分。延迟只能与动画功能一起使用

如果您只需要两个图像,那么将两个图像堆叠在一起并根据需要淡入淡出可能是最简单的

如果要将其扩展到许多图像,请尝试使用更强大的“.animate”功能淡入淡出。可以为“Animate”提供一个回调函数,完成后将调用该函数。

所有延迟从
$(document).ready()开始

这样想吧。当doc就绪时,JS开始执行该函数中的任何内容,它执行的第一个延迟是:
$(“#image1”).delay(5000).fadeIn(3000)

这将开始5000毫秒的延迟,然后是持续3000毫秒的
fadeOut()
。该fadeOut与延迟同步,但下一行代码与该行代码完全异步

然后它进入下一行。等等它不会等到你的延迟完成,它只是开始在后台计算

.delay()
应用于同一元素时会堆叠:


我留下这个,以防万一有人像我所说的那样困惑。。。延迟不会按你期望的方式工作。。。 以下是它的工作原理:

$(文档).ready(函数(){
var audio=新音频('sang3.mp3');
音频播放();
$(“#图像1”)
.hide()
.attr(“src”https://placeholdit.imgix.net/~text?txtsize=63&bg=FF6347&txtclr=ffffff&txt=Image-1&w=350&h=250“)
法丹先生(1000)
.延迟(3000)
.衰减(1000)
.queue(函数(下一个){
$(this).attr(“src”https://placeholdit.imgix.net/~text?txtsize=63&bg=FF6347&txtclr=ffffff&txt=Image-2&w=350&h=250“)
next();
})
.fadeIn(1000);
});

尝试利用
.queue()


延迟用于作为动画元素的队列项目,这里没有延迟的可能,这里有一个关于javascript如何执行的误解,但这并不是问题的真正原因。为了进一步研究帮助您更好地理解javascript代码的工作原理,我建议在本视频中介绍javascript事件循环,它是javascript操作的一个组成部分。我已经有了,它要么被接受要么被拒绝,只有时间会告诉我。点击“重新打开”;使用
.delay(duration,queueName)
可以实现问题中描述的预期结果,现在这确实是有意义的,但这样的任务怎么才能完成呢?我见过有人使用
setTimeout
也见过有人使用
setInterval
,我试图找出这些方法是如何实现的,但不幸的是没有成功。你能举一个简单的例子,如何做到这一点?您有什么建议。与jQuery堆栈中的本机JS超时
delay()
不同,因此这种解释是不正确的。“delay”函数在像她一样的同一对象上使用时,正如预期的那样工作正常。这不是问题。“延迟只能与动画功能一起使用。”fwiw
.Delay()
也可以与
.queue()
.dequeue()
一起使用,而不设置元素动画是的,guest271314,我想它可以,这也可以帮助解决当前的问题。“延迟仅对通过动画管道的操作有效”
。可以使用
.queue()
.dequeue()
在动画管道之外使用延迟()
$("#image1").delay(9000).attr("src", "image/image1.jpg");
$("#image1").delay(9000).attr("src", "image/image2.jpg");
$("#image1").delay(5000).fadeIn(3000);
$("#image1").delay(9000).attr("src", "image/image1.jpg"); 
$("#image1").delay(5000).fadeOut(3000);
$("#image1").delay(9000).attr("src", "image/image2.jpg");
$("#image1").delay(5000).fadeIn(3000);
$("#image1").delay(5000).fadeOut(3000);
  $("#image1").delay(5000).fadeIn(3000, function() {
      $(this).delay(9000, "task" ).queue("task", function() {
        $(this).attr("src", "image/image1.jpg")
        .delay(5000).fadeOut(3000, function() {
          $(this).delay(9000, "task")
          .queue("task", function() {
            $(this).attr("src", "image/image2.jpg")
            .delay(5000).fadeIn(3000, function() {
               $(this).delay(5000).fadeOut(3000)
            })
          }).dequeue("task")
        });
      }).dequeue("task")
    });