在应用dequeue()之前,多个动画不会在jQuery queue()上运行,为什么呢?
multiple animations do not run on using jQuery queue() until applied dequeue(), why so?
当我尝试调用多个css动画使用jQuery queue()函数像这样-
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('.text-hello')
.addClass('anim-hello-in')
.delay(1700)
.queue(function (next) {
$('.text-enjoy')
.addClass('anim-enjoy-in')
.delay(6500)
.queue(function (next) {
$('.text-hello')
.addClass('anim-hello-out');
$('.text-enjoy')
.addClass('anim-enjoy-out')
.delay(100)
.queue(function (next) {
console.log('entered');
$('#receipt')
.addClass('anim-receipt-in');
next(); //don't forget to dequeue so that the rest of the queue can run
});
});
});
});
</script>
所有序列都成功执行,除了最后一个队列函数,其中我在控制台中打印单词"enter"。既不执行控制台,也不写入在其后面执行的步骤。
BUT当我在上面的代码中添加'dequeue()'(如下所示)时,它完美地执行了所有动画,
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('.text-hello')
.addClass('anim-hello-in')
.delay(1700, 'fx1')
.queue('fx1', function (next) {
$('.text-enjoy')
.addClass('anim-enjoy-in')
.delay(6500,'fx2')
.queue('fx2', function (next) {
$('.text-hello')
.addClass('anim-hello-out');
$('.text-enjoy')
.addClass('anim-enjoy-out')
.delay(100, 'fx3')
.queue('fx3', function (next) {
console.log('in');
$('#receipt')
.addClass('anim-receipt-in');
next(); //don't forget to dequeue so that the rest of the queue can run
}).dequeue('fx3');
}).dequeue('fx2');
}).dequeue('fx1');
});
</script>
谁能解释一个例子,为什么它不工作之前,但工作后,当添加dequeue。因为我无法理解在这里使用dequeue的意义,因为我已经给出了延迟
必须为每个排队的元素调用Dequeue(直接或通过next
回调),以便处理队列中的下一个项目。队列附加到每个元素,因此一些队列不会相互干扰。实际添加第二个项目的唯一时间是在最后一个队列中,即.text-enjoy
。对next()的最后一次调用将取消最后一个函数的队列,但该函数永远不会进入(在.text-enjoy
上等待队列)
在第一个版本中,在.addClass('anim-enjoy-out')
之后添加dequeue也会导致下一个队列被处理。为了清洁起见,应该清除所有队列,但假设让初稿运行的简短解决方案是:
.addClass('anim-enjoy-out')
.delay(100).dequeue()
一个很好的解释可以在这里找到
edit为了清楚起见,下面是这样的:
$(document).ready(function(){
$('.text-hello') //<-- text-hello obj
.addClass('anim-hello-in')
.delay(1700)
.queue(function (next) { //<--queue on text-hello (1)
$('.text-enjoy') //<--text-enjoy object
.addClass('anim-enjoy-in')
.delay(6500)
.queue(function (next) { //<--queue on text-enjoy (1)
$('.text-hello') //<-- text-hello obj
.addClass('anim-hello-out');
$('.text-enjoy') //<--text-enjoy object
.addClass('anim-enjoy-out')
.delay(100)
.queue(function (next) { //<--queue on text-enjoy (2)
console.log('entered');
$('#receipt')
.addClass('anim-receipt-in');
next(); //don't forget to dequeue so that the rest of the queue can run
});
});
});
});
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- 使用jQuery.queue而不是setTimeout
- 做 jquery 延迟和 queue:false 相互否定
- 在 Jquery 中使用 queue() 和 filter() 链接会提高性能吗?
- jQuery在'$.queue()'中在哪里做动画/计时器
- jQuery.queue() 与使用回调函数完成某事有何不同
- 如何将JS对象传递给jQuery函数.queue()
- Jquery Queue请求集成一次First Request Success,然后调用下一个请求
- 无法获取jQuery's "queue"功能来工作
- 在应用dequeue()之前,多个动画不会在jQuery queue()上运行,为什么呢?
- jQuery animate queue: false不能同时制作动画
- Queue() / dequeue() JQuery工作不正常
- 从jQuery元素中移除slideToggle Queue
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么