fadeIn作为fadeOut后的回调函数不能按预期工作

时间:2012-03-21 15:52:56

标签: javascript jquery callback delay fadeout

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

以下代码位于函数中。调用时,我需要fadeOut中的任何可见链接的功能#sragTwo,暂停片刻,然后淡入#navInnerMapR。

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

代码淡出链接,但不会淡入任何内容。我认为它们只会在fadeOut完成后才会启动,但是将延迟值更改为1000会使它有时工作但是非常错误。谢谢

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

更新道歉,我的问题不包括我需要实现的全部细节。我简化了它,因为我认为我只是有一些可以很容易修复的sytax问题。

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

不同的事件将调用此函数,因此可以看到#navInnerMapR的2个链接中的任何一个。感谢

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

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

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

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

2 个答案:

答案 0 :(得分:1)

修改:根据您的以下评论更新答案,

  

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

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);
    });
}

答案 1 :(得分:0)

正如你所说,你需要fadeOut 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