jQuery children().fadeOut() 然后执行单个函数
jQuery children().fadeOut() then execute a single function
我有一个jQuery函数,看起来像这样:
$.get(urlCall, function (data) {
$('#divId').children().fadeOut("slow", function() {
$('#divId').append(data);
$('#divId').fadeIn("slow");
});
});
问题是它在"#divId"下为每个孩子调用一次追加和淡入行。我期待这条线
$('#divId').children().fadeOut("slow", function() {
淡出所有子项,然后执行函数 () 一次。但是由于它为每个孩子执行一次函数(),所以我附加了很多我不想附加的行。
我敢肯定一定有办法说,"淡出所有的孩子,然后做一次X",但我似乎不知道该怎么做。
帮助?
你可以使用 .promise()
$('#divId').children().fadeOut("slow").promise().done(function() {
$('#divId').append(data);
$('#divId').fadeIn("slow");
});
.promise() 方法返回一个动态生成的 Promise,它是 一旦绑定到集合的某种类型的所有操作都解决, 排队与否,已结束。
默认情况下,类型为"fx",这意味着返回的 Promise 已解析 当所选元素的所有动画都已完成时。
对于反对者
演示:小提琴
可靠地
做到这一点的唯一方法是创建自己的函数,该函数跟踪已完成的动画数量,并与原始动画的数量进行比较。像这样:
var target = $("#divId"),
children = target.children();
$("#trigger").on("click", function () {
toggleFadeAll(children, function () {
$("#message").fadeToggle();
});
});
function toggleFadeAll(els, callback) {
var counter = 0,
len = els.length;
els.fadeToggle(function () {
if (++counter === len) {
callback.call(null);
}
});
}
演示:http://jsfiddle.net/jbE3C/
(这显然需要根据您实际想要发生的动画进行调整)
toggleFadeAll
将调用所有fadeToggle
动画完成后提供的回调。
当元素可能发生其他动画时,使用 .promise()
会失败(不会在正确的时间点执行所需的回调)。
为什么不直接将淡入淡出和附加分开呢? 所以它会是
$.get(urlCall, function (data) {
$('.someElement').each(function(){
$('.fadeElement').fadeIn();
});
$('.otherElement').append(data)
});
相关文章:
- 用于多个类事件Jquery的单个函数
- 使用JavaScript&jQuery在单个函数(Nodes&Stuff)中
- 多个事件,用于触发 Chrome 书签 API 中的单个函数
- Javascript 使用单个函数从另一段代码中取消 POST
- jQuery children().fadeOut() 然后执行单个函数
- JavaScript 中的单个函数多次调用
- 使用单个函数进行货币验证和格式化
- Jquery 对多个 ID 应用单个函数
- 角度 - 我可以在嵌套的 ng-repeat 中的多个对象上使用单个函数来触发该对象的 ng-show 吗?
- 如何将这些函数合并为具有属性的单个函数
- 带有两个ajax调用的单个函数
- 单个函数中有多个RegExp
- 声明对象以在单个函数中重复使用的范围
- Javascript装饰器模式-原型或单个函数
- require node.js模块在单个函数中与全局函数中对性能的影响
- 在单个函数中包装链接函数的Javascript
- 需要协助将jquery单个函数转换为具有多个函数的对象实例
- jQuery:对于类似的操作,使用单个函数而不是重复的函数
- 针对浏览器和NodeJS的单个函数模块的语法
- 在触发单个函数之前,等待所有.then()执行完毕