.delay()和.setTimeout()

根据.delay()上的jQuery文档,

.delay()方法最适合延迟排队的jQuery效果。 因为它是有限的 – 例如,它没有提供取消延迟的方法 – .delay()不能替代JavaScript的本机setTimeout函数,这可能更适合某些用例。

请问有人可以扩展吗? 何时使用.delay()更合适,何时使用.setTimeout()更好?

我认为你发布的内容真的很有用。

.delay()用于jQuery效果,包括动画。

setTimeout()最适用于其他所有内容。 例如,当您需要在某个经过的时间触发事件时。

据我所知, .delay()专门用于在给定的jQuery队列中的方法之间添加延迟。 例如,如果您想在1秒的时间内将图像淡入视图,让它在5秒钟内可见,然后再花一秒钟将其淡出视图,您可以执行以下操作:

 $('#image').fadeIn(1000).delay(5000).fadeOut(1000); 

在这种情况下, .delay()使用起来更直观,因为它专门用于延迟给定jQuery队列中的事件。 另一方面, setImeout()是一种本地JavaScript方法,不是为队列行明确指定的。 如果您希望在单击按钮后弹出警报框1秒钟,则可以执行以下操作:

 function delayAlert() { var x = setTimeout("alert('5 seconds later!')", 5000); }  

.delay()主要用于将动画效果链接在一起,两者之间有暂停。

正如文档所述,没有办法取消延迟。 在您可能想要取消延迟的情况下,应该使用setTimeout()以便您可以使用clearTimeout()取消它

您可以将delay与动画结合使用,例如:

 $('.message').delay(5000).fadeOut(); 

您还可以使用timeOut延迟动画的开始,例如:

 window.setTimeout(function(){ $('.message').fadeOut(); }, 5000); 

如您所见,使用delay比使用动画的setTimeout更容易。

您可以使用setTimeout延迟任何事情,但您只能延迟延迟动画。 非动画的方法不受delay影响,因此在隐藏元素之前不会等待一段时间,它会立即隐藏它:

 $('.message').delay(5000).hide(); 

delay()的另一个副作用是:它似乎禁用隐藏(或fadeOut等)对象被延迟的能力,直到延迟结束。

例如,我设置以下代码(可能是stackoverflow开发人员将识别css名称….)来隐藏’div’:

  $j(document).ready(function(){ var $messageDiv = $j("
").addClass('fading_message') .text("my alert message here").hide(); var $closeSpan = $j("").addClass('notify_close').text("x"); $closeSpan.click(function() {$j(this).parent().slideUp(400);}); $messageDiv.append($closeSpan); $j('.content_wrapper_div').prepend($messageDiv); $messageDiv.fadeTo(500, .9).delay(5000).fadeTo(800,0); });

单击跨度中的“x”(位于“div”中)确实触发了单击function(我在那里测试了警报),但div没有按照指示滑动。 但是,如果我用这个替换最后一行:

  $messageDiv.fadeTo(500, .9); 

..然后它确实有效 – 当我点击“x”时,周围的div会滑动并离开。 似乎$ messageDiv上的“delay()”函数的后台运行“锁定”了该对象,因此尝试关闭它的单独机制在延迟完成之前无法执行此操作。