jquery垂直展开折叠手风琴二级菜单

 最近新开发一个简单项目,用到左侧两级的菜单。习惯性的去网上扒jquery手风琴效果,结果悲剧了好久…… 是该认认真真去学jquery,练习自己写动画效果了。从理解别人代码开始吧!

 注:jquery-1.8.3.min.js需要下载文件放到同级名为js的文件夹里。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>jquery垂直展开折叠手风琴效果</title>
    <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <style type="text/css">
        body {
            margin: 0px;
            padding: 0px;
            font-family: "微软雅黑";
            font-size: 12px;
        }

        div, ul, li, ol, dl, dt, dd, img, p, h1, h2, h3, p, table, td, th {
            margin: 0px;
            padding: 0px;
            list-style-type: none;
            border: 0;
        }

        a {
            text-decoration: none;
        }

     /* 侧导航 */
        .menu {
            width: 195px;
            background-color: #cfe5ec;
        }

         .menu ul {
             width: 195px;
             padding-top: 5px;
         }

      .menu li {
          background: #3E8ED5;
          line-height: 30px;
          color: #4f4f4f;
          display: block;
          text-indent: 3em;
          margin-top: 1px;
      }

        .menu li a {
            height: 30px;
            display: block;
            color: white;
        }

            .menu li a:hover {
                height: 30px;
                display: block;
                color: #4f4f4f;
            }

        .cur {
            background: #2668cb;
            font-weight: bold;
        }
        .submenu {
            font-size: 12px;
        }

            .submenu li {
                height:30px;
                line-height:30px;
                background: #48A1F0;
            }

            .submenu a {
                display: block;
                text-decoration: none;
                color: #d9d9d9;
                -webkit-transition: all 0.25s ease;
                -o-transition: all 0.25s ease;
                transition: all 0.25s ease;
            }

        .submenu a:hover {
            background: #2668cb;
            color: #FFF;
        }
    </style>

</head>
<body>
    <div>
        <ul class="menu" id="ulmenu">         
            <li>
                <a>开发语言</a>
                <ul class="submenu">
                  <li><a onclick="changeStyle(1);" sysId="1" href="#" >Java</a></li>
                  <li><a onclick="changeStyle(2);" sysId="2" href="#" >NET</a></li>
                  <li><a onclick="changeStyle(3);" sysId="3" href="#" >VB</a></li>
                  <li><a onclick="changeStyle(4);" sysId="4" href="#" >C++</a></li>
                </ul>
            </li>
            
            <li>
                <a>集成开发环境</a>
                <ul class="submenu">
                  <li><a onclick="changeStyle(5);" sysId="5" href="#" >WebStrom</a></li>
                  <li><a onclick="changeStyle(6);" sysId="6" href="#" >Visual studio</a></li>
                </ul>
            </li>
            <li>
                <a>脚本语言</a>
                <ul class="submenu">
                    <li><a onclick="changeStyle(7);" sysId="7" href="#">Javascript</a></li>
                    <li><a onclick="changeStyle(8);" sysId="8" href="#">Python</a></li>
                </ul>
            </li>
        </ul>
    </div>
</body>
<script type="text/javascript">
    $(function () {
        $('.menu li > .submenu').slideUp('normal');//通过使用滑动效果,隐藏被选元素,如果元素已显示出来的话

        var accordion_head = $('.menu > li > a'),
            accordion_body = $('.menu li > .submenu');
        //accordion_head.first().addClass('active').next().slideDown('normal');这行代码设置页面打开时展开第一个菜单
        accordion_head.on('click', function (event) {
            event.preventDefault();//preventDefault() 方法阻止元素发生默认的行为
            if ($(this).attr('class') != 'active') {
                accordion_body.slideUp('normal');
                $(this).next().stop(true, true).slideToggle('normal');
                //获取.menu > li > a > 点击元素的同级的下个元素>停止所有在该元素上正在运行的动画>通过使用滑动效果在显示和隐藏状态之间切换元素
                accordion_head.removeClass('active');
                $(this).addClass('active');
            }
            else {
                accordion_body.slideUp('normal');
                $(this).removeClass('active');
            }
        });
    });

    function changeStyle(obj) {
        $(".submenu a").each(function () {
            if (obj == $(this).attr("sysId")) {
                $(this).addClass('cur');
            } else {
                $(this).removeClass('cur');
            }
        });
    }

</script>
</html>

样式active用来标记当前哪个元素是展开状态,主要用到jQuery里的slideUp和 slideToggle方法。

你可能感兴趣的:(jquery垂直展开折叠手风琴二级菜单)