javascript – 多个show hide toggle with div滑出

我是编码新手,需要jQuery帮助.我有2< div> s(一个带有图像,另一个带有菜单列表,宽度均为50%)我需要能够单击其中一个菜单选项以显示新的div(50%宽度)从右边同时将其他2个div的宽度减少到25%.然后单击相同的菜单选项以隐藏新div并恢复为原始宽度.但是,如果我在新div显示时单击另一个菜单选项,我需要它将内容更改为该特定菜单选项内容.

如何交换左手< div>用jQuery出来?

这是我正在使用的HTML

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title></title>
     <!-- SCRIPT FILES -->    
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
     <script type="text/javascript" src="script.js"></script>     
     <!-- CSS STYLESHEETS -->    
    <link rel="stylesheet" href="reset.css" type="text/css" />
    <link rel="stylesheet" href="main.css" type="text/css" />    
</head>
<body>
    <div id="wrapper">    
        <div id="header">        
        </div><!--header-->        
            <div id="container">        
                <div class="box-container">                
                    <div class="box1">                    
                        <img src="images/Untitled-1.png" alt="logo">                    
                    </div>                    
                    <div class="box2">                    
                        <div id="nav">                        
                            <ul>                            
                                <li><a>hello!</a></li>                                
                                <li><a>ADVERTISING</a></li>                                
                                <li><a>DESIGN</a></li>                                
                                <li><a>ABOUT</a></li>                                
                                <li><a>BLOG</a></li>                                
                                <li><a>SHOP</a></li>                                
                            </ul>                            
                        </div><!--nav-->                        
                    </div><!--box2-->                    
                    <div class="box3">                    
                        <div id="ADVERTISING" class="content">ADVERTISING</div>                        
                        <div id="DESIGN" class="content">DESIGN</div>                        
                        <div id="ABOUT" class="content">ABOUT</div>                        
                        <div id="BLOG" class="content">BLOG</div>        
                        <div id="SHOP" class="content">SHOP</div>                    
                    </div>                    
                </div><!--box-container-->            
            </div><!--container-->        
        <div id="footer">        
        </div><!--footer-->        
    </div><!-- wrapper-->        
</body>
</html>​

这是一个有效的jsFiddle风格:http://jsfiddle.net/YcphY/6/

最佳答案 对于初学者,
here’s a method that ties the below examples of how to do this into the animation you’re after

$(function() {
  $("#nav").delegate("li","click", function() {
    var newDiv = $(".box3 .content").eq($(this).index()-1);
    newDiv.siblings().hide().end(); // hide the others
    if(newDiv.is(":visible")) {
      // if shown, fade it out, when the fade finishes, slide everything back
      newDiv.fadeOut(function() { 
        $(".box3").hide(); 
        $(".box1, .box2").animate({ width: "50%" });
      });
    } else {
      // if not shown, then slide over space, then fade in
      $(".box1, .box2").animate({ width: "25%" }, function() {
        $(".box3").show();
        newDiv.fadeIn("fast");
      });
    }
  });        
});​

鉴于您当前的CSS,您可以这样做:

$(function() {
    $("#nav").delegate("li a","click", function() {
        $(".box3").show();
        $("#" + $(this).text()).show().siblings().hide();
    });        
});​

Here’s a working example,虽然你可以看到CSS需要一些工作才能让它达到100%.我建议做一些更改:给你的链接和容器匹配ID,如下所示:

<li><a id="ad">ADVERTISING</a></li> 

<div id="ad-container" class="content">ADVERTISING</div>  

然后JS可以是:

$(function() {
    $("#nav").delegate("li a","click", function() {
        $(".box3").show();
        $("#" + this.id + "-container").show().siblings().hide();
    });        
});

Here’s a working example of that …它允许您随意更改文本,而不用担心JS会在以后破坏.另一个替代方案是使用< li>的.index()取消列表中链接的索引,如果在所有情况下链接的数量与< div> s一致,即使由于“你好!”链接.

Here’s an example of an index approach使用您当前的HTML:

$(function() {
    $("#nav").delegate("li","click", function() {
        $(".box3").show();
        $(".box3 .content").hide().eq($(this).index()-1).show();
    });        
});​
点赞