【问题标题】:fadeIn as callback function after fadeOut doenst work as expected淡入淡出后作为回调函数的淡入淡出不能按预期工作
【发布时间】:2012-03-22 01:54:46
【问题描述】:

在我的 HTML 中,a#navInnerMapR 和 a#navInnerMapL 包含在 div#navTwo 中。

以下代码在函数内。调用时,我需要该函数将 div#navTwo 中的任何可见链接淡出,暂停片刻,然后淡入 #navInnerMapR。

$('div#navTwo a').fadeOut(200, function() {
    $('a#navInnerMapR').delay(100).fadeIn(200);
});

代码淡出链接,但不淡入任何内容。我认为它们延迟只会在fadeOut 完成后开始,但是将延迟值更改为1000 使其有时可以工作,但它非常有问题。谢谢

更新这是一个小提琴,显示隐藏链接在隐藏可见之前开始显示:http://jsfiddle.net/jamesbrighton/d9QKr/5/

更新道歉,我的问题不包括我需要实现的全部细节。我简化了它,因为我认为我只是有某种可以轻松修复的语法问题。

div#navTwo 实际上包含 3 个链接。在任何时候(除了动画运行前的延迟)只有 1 个链接可见。我需要能够调用一个函数来隐藏正在显示的其他 2 个链接中的任何一个,然后显示 #navInnerMapR。

不同的事件将调用此函数,因此不是#navInnerMapR 的两个链接中的任何一个都可能是可见的。谢谢

更新我认为这个小提琴说明了这个问题。我创建了 2 个 div.nav 来说明不同的状态。我在每个链接中都隐藏了带有内联 CSS 的不同链接。 JavaScript 将重复显示和隐藏我的 div 中的链接,因此同一个 div 在不同时间看起来像每个示例。

我创建了 2 个触发器来说明需要调用函数的不同事件。当您单击触发器时,您可以看到这两个示例的问题。在显示 a.one 之前,可见的 div 不会被隐藏。谢谢你的耐心!

http://jsfiddle.net/jamesbrighton/dYvMS/24/

有趣的一点,如果我改变 $('.nav a.one').fadeIn(1000);警报,警报会触发多次!不知道为什么会这样!

【问题讨论】:

  • Works for me。顺便说一句,您不需要delay,因为在fadeOut 动画结束后将调用一次回调。
  • 看起来隐藏链接在隐藏可见链接之前开始显示jsfiddle.net/jamesbrighton/d9QKr
  • 你想达到什么目的?你希望它如何工作?例如:单击右链接时会发生什么?试试jsfiddle.net/skram/d9QKr/6
  • 是的,这就是我想要的,但我需要一个我可以调用的函数中的动画,因为点击不同的东西会实现它。为什么我的代码不像你的那样工作?谢谢
  • 从技术上讲,我希望在淡出和淡入之间有一个延迟,所以这更符合我的要求,但就像我说的那样,我需要能够使用多个事件调用该函数。这些事件还具有触发它们的各种条件,这就是为什么将事物分开很重要的原因。 jsfiddle.net/jamesbrighton/tbAF7

标签: javascript jquery callback delay fadeout


【解决方案1】:

编辑:根据您的以下评论更新答案,

是的,这可以满足我的需要,但我不确定它是否适用于我的实际 页。对不起,我的问题不够详细。编码 我给出的例子是简化的。在实际页面中,它们是 3 个链接 在 div#navTwo 中,任何时候只有其中一个可见。我 需要能够调用隐藏任何链接并显示 具体的一个,但 div#navTwo 中的其他 2 个链接之一可能是 可见的。谢谢

DEMO

HTML:为 navTwo 内的所有链接添加了类

<div id="navTwo">
    <a href="#" id="navInnerMapR" class="links">Right</a>
    <a href="#" id="navInnerMapL" class="links">Left</a>
    <a href="#" id="navInnerMapM" class="links">Middle</a>
    <a href="#" id="navInnerMapU" class="links">Upper</a>
    <a href="#" id="navInnerMapLW" class="links">Lower</a>
</div>

JS:

$('.links').click(function() {
       showHide($(this));
});

function showHide($this) {    
    $this.fadeOut(1000, function() {
         $('#navTwo a').not($this).delay(1000).fadeIn(1000);
    });
}

我想我明白你需要什么。试试下面的 DEMO,让我知道这是否是你想要的,

DEMO

$('#navInnerMapR').click(function() {
       runMeR($(this));
});
$('#navInnerMapL').click(function() {
       runMeL($(this));
});

function runMeR($this) {    
    $this.fadeOut(1000, function() {
         $('a#navInnerMapL').delay(1000).fadeIn(1000);
    });
}
function runMeL($this) {    
    $this.fadeOut(1000, function() {
        $('a#navInnerMapR').delay(1000).fadeIn(1000);
    });
}

【讨论】:

  • 是的,这可以满足我的需要,但我不确定它是否适用于我的实际页面。对不起,我的问题不够详细。我给出的代码示例被简化了。在实际页面中,它们是 div#navTwo 中的 3 个链接,在任何时候只有其中一个可见。我需要能够调用一个隐藏任何链接并显示特定链接的函数,但 div#navTwo 中的其他 2 个链接中的任何一个可能是可见的。谢谢
  • 如果我在你的小提琴中添加第三个链接,它不会隐藏
  • @jdln 您需要详细说明您需要的具体信息。例如:当我点击触发器时会发生什么?请更具体一些,并尝试开始新问题,而不是更新现有问题。
  • 这个小提琴应该演示这个问题。在显示 a.one 之前,可见的 div 不会被隐藏。 jsfiddle.net/jamesbrighton/dYvMS/24
  • @jdln 我看到了那个演示,很困惑。您的代码按预期工作,该代码没有任何问题。在您的演示中,$('.nav a') 将选择两个 div 中的所有链接(其中 6 个)。您正试图将它们全部淡化并在回调中显示它们,这会弄乱动画。正如我在之前的评论中提到的,更具体地说明你想要什么。如果您让我们知道您想要什么,那么我们可以修改该代码以帮助您。很难假设您想要什么并查看该代码。
【解决方案2】:

正如你所说,你需要这个函数来淡出 div#navTwo 中的任何可见链接,暂停片刻,然后淡入一个#navInnerMapR(不是其他链接,只有一个#navInnerMapR)。

$('#navTwo a').click(function(e) {
    $(this).parent().children().each(function(i){
        $(this).fadeOut('slow', function(){
            $('a#navInnerMapR').delay(1000).fadeIn(1000);
        });
    });
});​

小提琴是here

【讨论】:

  • 对不起,我认为我的问题足够详细,可以解释我真正需要什么。我已经更新了。谢谢
猜你喜欢
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2013-03-17
  • 1970-01-01
  • 2012-05-20
相关资源
最近更新 更多