Jquery delay()不';行不通
我有以下JavaScript代码片段: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
$("#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")
});