【问题标题】:Vertical sliding / toggle menu垂直滑动/切换菜单
【发布时间】:2011-12-12 01:55:11
【问题描述】:

我想使用垂直滑动/切换菜单,请看下面我的代码,目前菜单只有当你点击+号时才会切换,请看下面的代码。

我正在尝试一种方法,当您单击类别名称(例如帖子)时,子菜单将打开(与 + 功能相同)并且页面将转到帖子页面。当你点击+号时,功能和页面保持不变。

我该如何定位这个任务?感谢您的帮助/建议。

谢谢!

<html>
<head>
<style type="text/css">
body{background:#CCC;}
#container{margin:0 auto; background:white; border:1px solid #999; width:400px;       padding:20px; -moz-border-radius:10px;-webkit-border-radius:10px;  overflow:hidden;}
#menu {text-align:left;}
/*Toggle Area*/
#menu .toggle {float:right;width:9px; padding:5px; cursor:pointer; border-top:1px     solid white; border-left:1px solid #E0E0E0; color:#999;}
#menu ul.navmenu li:first-child .toggle{border-width:0 0 0 1px;}
/*Menu Setup*/
#menu ul{padding:0; margin:0; width:150px;}
#menu ul ul{border:1px solid #CCC;overflow:hidden;}
#menu ul.navmenu li {margin:0; list-style:none;float:left;}
#menu ul.navmenu li li {float:none;}
/*Links*/
#menu ul.navmenu a, #menu ul.navmenu a:visited {text-decoration:none; padding:5px; display:block; color:#008FDD;}
#menu ul.navmenu ul.submenu a:hover{background:#FFF4D2; color:#333;}
/*Heading Outer div*/
#menu ul.navmenu .menutop{border:1px solid #CCC; border-width:0 1px; overflow:hidden; width:150px; background:#F9F9F9; }
/*Header Links*/
#menu ul.navmenu .menutop a{width:120px;float:left;margin:0 0 1px 0; border-top:1px solid white;}
/*Header Link Hover*/
 #menu ul.navmenu .menutop a:hover{color:#333;}
/*Removes white border for the first header*/
 #menu ul.navmenu li:first-child .menutop a {border-width:0px;}
/*Single Menu Width Fix*/
#menu ul.navmenu .menusingle a{width:140px;}
/*Border Radius and Special Border Width*/
#menu ul.navmenu li:first-child .menutop{border-width:1px 1px 0 1px; -moz-border-radius:5px 5px 0 0;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;}
#menu ul.navmenu li:last-child .menutop{border-width:0px 1px 1px 1px; -moz-border-radius:0 0 5px 5px; -webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;}
 #menu ul.navmenu li:last-child ul.submenu{-moz-border-radius:0 0 5px 5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;}
#menu ul.navmenu li:last-child .menutop-open{-moz-border-radius:0;-webkit-border-radius:0px; border-width:0 1px;} 
</style>
<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"   type="text/javascript">

</script>



<script type="text/javascript">
$(document).ready(function(){
hideMenus();

$('.toggle').click(function(){
    var menu = $(this);
    hideMenus();

    if (menu.hasClass('toggle-open')) {     
        menuHide(menu);
    }else{
        menuShow(menu);
    }
});
});
 function hideMenus(){
$('.toggle').each(function(){
    menuHide($(this));
});
}

function menuHide(menu){ 
menu.removeClass('toggle-open').addClass('toggle-closed').empty('').append('+').parents('li').children('ul').slideUp(250); 
menu.parent('.menutop').removeClass('menutop-open').addClass('menutop-closed'); 
} 
function menuShow(menu){ 
menu.parent('.menutop').removeClass('menutop-closed').addClass('menutop-open'); 
menu.removeClass('toggle-closed').addClass('toggle-open').empty('').append('–').parents('li').children('ul').slideDown(250); 
}



</script>
</head>

<body>
<div id="container">
<div id="menu">
<ul class="navmenu">
<li><div class="menutop"><a href="#">Posts</a><div class="toggle">+</div></div>
 <ul class="submenu">
   <li><a href="#">Add New</a></li>
   <li><a href="#">Tags</a></li>
 </ul>
</li>
<li><div class="menutop"><a href="#">Pages</a><div class="toggle">+</div></div>
 <ul class="submenu">
   <li><a href="#">Add New</a></li>
   <li><a href="#">Edit</a></li>
 </ul>
</li>
<li><div class="menutop menusingle"><a href="#">Comments</a></div></li>
<li><div class="menutop"><a href="#">Users</a><div class="toggle">+</div></div>
 <ul class="submenu">
   <li><a href="#">Manage</a></li>
   <li><a href="#">Add New</a></li>
   <li><a href="#">Profile</a></li>
 </ul>
</li>
</ul>
</div></div>
</body>
</html>

【问题讨论】:

  • 所以你想点击类别名称而不是+?
  • toggle 类似乎用于选择切换子菜单的元素。
  • 您好 JQuerybeast,感谢您的快速回放。我想单击名称以及 + 号。因此,当您单击类别名称时,它会进入类别名称页面并向下滑动以下菜单。当您仅单击 + 号时,以下菜单会下降,但页面仍保留在同一页面上。我希望这是有道理的。谢谢。 S:)
  • 您好 Jared,感谢您的回复。关于我如何定位这个切换类的任何代码/建议?非常感谢,S

标签: javascript jquery navigation toggle slidetoggle


【解决方案1】:

这是我用来做这件事的代码,除了我使用箭头图像而不是 + 和 - 但你应该能够修改它。希望对您有所帮助!

编辑: 我已经把下面的代码放到了 JSFiddle 上,你可以试试看:http://jsfiddle.net/CrxAg/3/

HTML:

<div id="menu">
    <div class="submenublock" id="submenu1"><h3>Category1</h3>
        <ul>
            <li><a href="page.html">option1</a></li>
            <li><a href="page.html">option2</a></li>
        </ul>
     </div>
    <div class="submenublock" id="submenu2"><h3>Category2</h3>
        <ul>
            <li><a href="page.html">option1</a></li>
            <li><a href="page.html">option2</a></li>
        </ul>
     </div>
</div>

JS:

$(document).ready(function(){
    $('div.submenublock > ul').hide();  
    $("div.submenublock > h3").css("background", "url(images/menuarrowdown.gif) no-repeat right bottom");

    $('div.submenublock > h3').click(function() {
        $(this).next().slideToggle('fast',function(){
            //set arrow depending on whether menu is shown or hidden
            if ($(this).is(':hidden')) {
                $(this).prev().css("background", "url(images/menuarrowdown.gif) no-repeat right bottom"); 
            } else {
                $(this).prev().css("background", "url(images/menuarrowup.gif) no-repeat right bottom"); 
            }
            return false;
        }); 
   });

    /* change appearance of h3 element on hover to make it look like a link */
    $('div.submenublock > h3').hover(over, out);
    function over(event) {
        $(this).find("a").css("color", "#663");
        $(this).css("cursor", "pointer");
    }
    function out(event) {
        $(this).find("a").css("color", "");
        $(this).css("cursor", "default");
    } 
    /*end hover code*/
});

【讨论】:

  • 您好 Fluffykitten,非常感谢您的编辑。我会试一试,让你知道我是怎么走的。非常感谢您的回复。 S:)
  • 没有问题。只是为了让您知道我的 JSFiddle 链接是错误的,以防您已经尝试过,我现在已经用正确的链接更新了它(jsfiddle.net/CrxAg/3
  • 我注意到您编辑了您的帖子以包含您的代码,所以我已经让它与您的代码一起使用:jsfiddle.net/MCLFt/1 这不完全是您所需要的 - 它不会在您关闭其他类别时打开一个。最后一个菜单的边框也有点偏离,可能与我给每个菜单的 id 有关,但你会比任何人都更了解你的 css。
  • 嗨小猫,我编辑了我的帖子并逃避了这个问题。我已经尝试过你刚才给我的子菜单块代码,万岁,它工作得很好,谢谢。它比我得到的教程更好。只是一个问题,我不知道这有多容易。我为类别名称添加了一个链接,例如类别 1(即 h3),当人们单击类别 1 时,它会转到页面,是否可以使 标记延伸到箭头图像,在空白处类别 1 和箭头之间只是扩展了菜单。有什么建议?非常感谢您的帮助!
  • 伙计们,这太长了。请考虑搬到 SO 聊天室!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2013-07-17
  • 2017-01-15
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多