Jquery延迟在.html()调用后被忽略


Jquery delay being overlooked after .html() call

我试图在加载图像后引入延迟,但它一直跳过。delay()

$('"#output'").html('"<center><img src='http://i.imgur.com/GM6KJdh.gif' /></center>'").delay(5000);

我已经尝试了上面代码的许多版本,但它仍然不起作用

感谢大家的帮助。

正如jQuery文档中所解释的,.delay()是一个jQuery动画方法,它只延迟后续动画(在同一元素上),它不会延迟非动画方法的结果,也不会"暂停"代码执行。因此,在显示的代码行之后的任何代码行都将立即执行。

假设你想做的是在执行下一行之前等待两秒钟,你可以这样做:

$("#output").html("<center><img src='http://i.imgur.com/GM6KJdh.gif' /></center>");
setTimeout(function() {
   // your other code here
}, 2000);

它使用JavaScript的内置setTimeout()函数来延迟你传递给它的函数中任何代码的执行

来自jQuery文档

.delay()方法最适合在排队的jQuery之间延迟效果。因为它是有限的,例如,它没有提供一种方法.delay()不能替代JavaScript的nativesetTimeout函数,它可能更适合某些用途例。

你的图像正在加载,然后延迟触发,然后…接下来会发生什么就看你了。但是因为。delay是附在#output上的,所以你只能对#output做一些事情。例如,您可以将其淡出。

$("#output").html("<center><img src='http://i.imgur.com/GM6KJdh.gif' /></center>").delay(5000).fadeOut();
http://jsfiddle.net/M2GRj/

如果你想在加载图像之前设置一个延迟,那么在设置html.

之前使用delay
$("#output").hide().delay(5000).html("<center><img src='http://i.imgur.com/GM6KJdh.gif' /></center>").fadeIn();
http://jsfiddle.net/M2GRj/3/

如果你想在图片加载后触发暂停,那么给你的图片一个ID,并在加载事件中调用setTimeout函数。

$("#output").html("<center><img id='img1' src='http://i.imgur.com/GM6KJdh.gif' /></center>");
// Note: You can only use this after #img1 has been added to the DOM
$('#img1').load(function(){setTimeout('alert("hello")',5000);});
http://jsfiddle.net/M2GRj/5/

AFAIK delay()函数只是延迟队列中后面的函数。所以你需要在delay()之后调用另一个函数。

也许你可以试试

.delay(5000).finish();

jQuery API说:

.delay()方法允许我们延迟函数的执行跟着它排队。它可以与标准效果队列一起使用或者使用自定义队列。只有队列中的后续事件才会被延迟

作为

下面检查的例子

当执行下面的语句时,元素向上滑动300毫秒,然后暂停800毫秒,然后淡出400毫秒。

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

如果延迟后没有任何后续事件,则可以使用JavaScript's native setTimeout function

如何使用setTimeout function ?

setTimeout(function() {
  //your code
}, 2000);  // will work with every browser

查看.delay()setTimeout