.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()”函数的后台运行“锁定”了该对象,因此尝试关闭它的单独机制在延迟完成之前无法执行此操作。