2011-02-26 79 views
3

在我问的一个类似问题上发挥了很好的回答。jquery在div之间切换并随后隐藏活动div

三个div,全部隐藏。 jquery通过不同的链接在它们之间切换。这很好用!现在,我想要粘贴对应于活动div的链接并将其隐藏起来,实际上与隐藏所有页面时页面加载时一样。现在它淡出并返回。

帮助!谢谢!

HTML:

<div id="nav"> 
    <a class="home" id="show_about" title="About">ABOUT</a><br /> 
    <a class="home" id="show_subscribe" title="Subscribe">SUBSCRIBE</a><br /> 
    <a class="home" id="show_contact" title="Contact">CONTACT</a> 
</div> 
<div id="content"> 
    <div class="current" id="about"> 
     <p>ABOUT's content</p> 
    </div> 
    <div id="subscribe"> 
     <p>SUBSCRIBE's content</p> 
    </div> 
    <div id="contact"> 
     <p>CONTACT's content</p> 
    </div> 
</div> 

的Javascript:

$(function(){ 
     $('#about').css('display', 'none'); 
     $('#subscribe').css('display', 'none'); 
     $('#contact').css('display', 'none'); 
    }); 
    $('.home').click(function(){ 
     var id = $(this).html().toLowerCase(); 
     $('.current').fadeOut(600, function(){ 
      $('#'+id).fadeIn(600); 
      $('.current').removeClass('current'); 
      $('#'+id).addClass('current');  
     }); 
    }); 

回答

2

尝试了这一点..

由于上淡出当前类被去除,如果电流的大小为0意味着没有被选中。我们可以简单地淡入内容div。

$('#about, #subscribe, #contact').hide(); 

$('.home').click(function() { 
    var id = $(this).html().toLowerCase(); 
    var $content = $('#' + id + ':not(:visible)'); 
    if ($('.current').length === 0) { 
     showContent($content) 
    } 
    else { 
     $('.current').fadeOut(600, function(){showContent($content)}); 
    } 
}); 

function showContent(content) { 
    content.fadeIn(600); 
    $('.current').removeClass('current'); 
    content.addClass('current'); 
} 

jsfiddle上的示例。

+0

@Mark 我想我应该添加一个小浮动X按钮来关闭窗口。最好把这个功能加入到这个功能中,或者另一个呢? #close是ID – technopeasant 2011-02-27 19:59:07

+0

所以你想添加一个关闭链接的内容div?我会把它变成一个不同的功能。由于现在主页点击正在处理您的菜单/内容显示。如果你在一个关闭函数中工作,它可能会导致一个可能做得很好的方法。 – 2011-02-27 20:14:26

+0

@好极了,谢谢你的指导。如果我理解你的功能正确..它将移动class =“current”到显示的div。我可以做一个简单的点击功能,淡出class =“current”div吗? – technopeasant 2011-02-27 20:26:57

0

检查,看是否点击的元素的ID等于当前显示的元素的ID(即与元素目前类)。如果它是一个不同的元素,则需要进行交换。如果是相同的元素,那么它需要被隐藏,有其当前类中删除...

(编辑:固定码)

HTML:

<div id="nav"> 
    <a class="home" id="show_about" title="About">ABOUT</a><br /> 
    <a class="home" id="show_subscribe" title="Subscribe">SUBSCRIBE</a><br /> 
    <a class="home" id="show_contact" title="Contact">CONTACT</a> 
</div> 
<br /> 
<br /> 
<br /> 
<div id="content"> 
    <div id="about"> 
     <p>ABOUT's content</p> 
    </div> 
    <div id="subscribe"> 
     <p>SUBSCRIBE's content</p> 
    </div> 
    <div id="contact"> 
     <p>CONTACT's content</p> 
    </div> 
    <div class="current" id="dummy"></div> 
</div> 

JS:

$().ready(function() 
{ 
     $('#about').hide(); 
     $('#subscribe').hide(); 
     $('#contact').hide(); 
     $('#dummy').hide(); 


    $('.home').click(function() { 
    var id = $(this).html().toLowerCase(); 

     if ($('.current').length >0) { 
     if($('.current')[0].id.toLowerCase() != id) 
     { 
      $('.current').hide(); 
      $('.current').removeClass('current'); 
      $('#'+id).addClass('current');  
      $('#'+id).show(); 
     } 
     else 
     { 
      $('.current').hide(); 
      $('.current').removeClass('current'); 
      $('#dummy').addClass('current'); 
     } 
     } 
    }); 
}); 

只需用淡入和淡出替换.hide()和.shows()。

+0

@迈克尔,只是我们可以使用jQuery” .hide隐藏,而不是显示没有.. – kobe 2011-02-26 20:35:36

+0

这是从OP的代码复制,现在删除,因为建议它不是需要调整以解决问题的功能的一部分。虽然有效的点。 – TimFoolery 2011-02-26 20:38:47

+0

@Michael多数民众赞成酷...没有probs – kobe 2011-02-26 20:40:09

2

这里是另一种方法:

$(function(){ 
     $('#content div').hide(); 
    }); 

    $('.home').click(function(){ 
     var targetSelector = '#' + $(this).attr('title').toLowerCase(); 
     var targetShown = $(targetSelector).is(':visible'); 

     if (targetShown) { 
      $(targetSelector).fadeOut(600); 
     } else { 
      $('#content div:not(' + targetSelector + ')').fadeOut(600, 
             function() {$(targetSelector).fadeIn(600)}); 
     } 
    });