jquery - 回调函数不会等到第一个函数完成。我该如何解决/解决这个问题?

标签 jquery callback show-hide

我有一个“幻灯片”......之类的。我正在尝试让一个 div 淡出,然后另一个 div 淡入。

问题是,在新的 div 出现之前,可见的 div 并没有完全消失。这会导致两个 div 同时出现时出现尴尬的闪烁。

注意:我无法使用绝对定位来堆叠 div,因为我希望包装器(父)div 随内容一起扩展。当我通过绝对定位将 div 从“流”中取出时,我似乎无法实现此目的。

JSfiddle:HERE.

这是 html:

<a href="#" class="red">RED</a> 
<a href="#" class="blue">BLUE</a> 
<a href="#" class="green">GREEN</a> 
<a href="#" class="yellow">YELLOW</a>
<div id="red"></div>
<div id="blue"></div>
<div id="green"></div>
<div id="yellow"></div>

...CSS...

#red, #blue, #green, #yellow{display:none; width:200px; height:200px;}
#red{background:red;}
#blue{background:blue;}
#green{background:green;}
#yellow{background:yellow;}

...和 ​​JQuery。

$('a.red').click(function() {
  $("#blue, #green, #yellow").hide('fade', function() {
      $("#red").show('fade');
  });
});

$('a.blue').click(function() {
  $("#red, #green, #yellow").hide('fade', function() {
      $("#blue").show('fade');
  });
});

$('a.green').click(function() {
  $("#red, #blue, #yellow").hide('fade', function() {
      $("#green").show('fade');
  });
});

$('a.yellow').click(function() {
  $("#red, #blue, #green").hide('fade', function() {
      $("#yellow").show('fade');
  });
});

我一直在摆弄这个!任何帮助将不胜感激。

最佳答案

问题是 .hide() 正在为所有匹配的元素运行,然后即使匹配的元素不可见也运行回调。通过使用 .filter() 方法,您可以确保“.hide()”方法以及回调仅被触发一次。这意味着代码会变得庞大,因为您需要捕获尚未显示任何内容的情况,但它确实工作得很好。

一个例子是

$('a.red').click(function () {
    var elements = $("#blue, #green, #yellow").filter(":visible");
    if (elements[0]) {
        elements.fadeOut(function () {
            $("#red").fadeIn();
        });
    } else {
        $("#red").fadeIn();
    }
});

您可以在 JSFiddle 中看到这完全有效。

关于jquery - 回调函数不会等到第一个函数完成。我该如何解决/解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430532/

相关文章:

ios - KVO 区分 willChangeValueForKey 和 didChangeValueForKey - 两者都是必要的吗?

javascript - 使用 JavaScript 显示/隐藏表单的某些部分。如何一次只显示一个部分?

javascript - 使用按钮切换显示/隐藏 div 以获取多个结果

Javascript Cookie 函数仅适用于索引文件

javascript - PHP 无法获取 AJAX JSON 数据

java - 如何删除 json 格式中的特殊字符

php - 在文本输入中显示截断的值,但最终将完整值存储在数据库中

javascript - 从回调中访问 `this`

ruby - 何时使用回调 vs 仅返回一个值

excel - 基于单元格值动态隐藏列