43-jQuery折叠菜单下(添加事件)

 
    感想: 一.学习了1.transform: rotate(90deg);是用来旋转角度的。
                     补充:2.transform: scale(0.5) 或者 transform: scale(0.5, 2);
                              (1)一个参数时表示水平和垂直同时缩放该倍率。
                              (2)两个参数时:第一个参数指定水平方向的缩放倍率,第二个参数指定垂直方向的缩放倍率
                               3.transform: skew(30deg)  或者 transform: skew(30deg, 30deg);
                              (1)一个参数时:表示水平方向的倾斜角度
                              (2)两个参数时:第一个参数表示水平方向的倾斜角度,第二个参数表示垂直方向的倾斜角度
                二.这个折叠菜单用原生JS写,略麻烦。而jQuery写起来则方便的多 ,并且原生JS很难实现jQuery中的slideDown和      slideUp这个效果。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>43-jQuery折叠菜单下(添加事件)</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .nav{
            background: rgb(252,252,252);
            list-style: none;
            width: 300px;
            margin: 100px auto;
            /*border: 1px solid #000;*/
        }
        .nav>li{
            border: 1px solid #000;
            line-height: 35px;
            border-bottom: none;
            text-indent: 2em;
            position: relative;
        }
        .nav>li:last-child{
            border-bottom: 1px solid #000;
            border-bottom-left-radius: 10px;
            border-bottom-right-radius: 10px;

        }
        .nav>li:first-child{
            border-top-left-radius: 10px;
            border-top-right-radius: 10px;

        }
        .nav>li>span{
            background: url("images/arrow_right.jpg") no-repeat center center;
            display: inline-block;
            width: 32px;
            height: 32px;
            position: absolute;
            right: 10px;
            top: 5px;
        }
        .sub{
            display: none;
        }
        .sub>li{
            list-style: none;
            background: mediumpurple;
            border: 1px solid white;

        }
        .sub>li:hover{
            background: red;
        }
        .nav>.current>span{
            transform: rotate(90deg);
        }
        .show{
            display: block;
        }
    </style>
<script src="JS_file/jquery-1.12.4.js"></script>
<script>
  /*   $(function () {
             // 1.监听一级菜单的点击事件
         $(".nav>li").click(function () {
             //    1.1拿到二级菜单
             var $sub=$(this).children(".sub");
             //判断二级菜单是否隐藏,若隐藏,执行下面事件
             if($sub.is(":hidden"))
             {
                 //    1.2让二级菜单展开
                 $sub.slideDown();
                 //    1.3拿到所有非当前的二级菜单
                 var otherSub=$(this).siblings().children(".sub");
                 //    1.4让所有的非当前菜单隐藏
                 otherSub.slideUp();
                 //    1.5让被点击的一级菜单箭头旋转
                 $(this).addClass("current");
                 //    1.6让所有非被点击的一级菜单箭头还原
                 $(this).siblings().removeClass("current");
             }
             //若显示,则点击该一级菜单时,让它变为隐藏,并将该一级菜单的箭头恢复。
            /!*(视频上教的并没有这个if else,但有个问题就是,只要点击一级菜单,将一直会有二级菜单展开,如何收起呢?
            点击后,先判别该点击的一级菜单下的二级菜单是否显示。用到了is(":hidden")方法
            )*!/
             else
             {
                 $sub.slideUp();
                 $(this).removeClass("current");
             }

         })
     })*/
    

    //原生JS写法
    window.onload=function () {
        var oNav=document.getElementsByClassName("nav")[0];
        var aUl=document.getElementsByClassName("sub");
        var aLi=oNav.children;
       // alert(aLi.length)
        for(var i=0;i<aLi.length;i++)
        {
            aLi[i].index=i;
            aLi[i].onclick=function () {
               /* 注意了:之前我也遇见过这个我问题,不能写if(aUl[this.index].style.display=="none"){}else{}
                  若这样写:第一次点击一级标题,console.log(aUl[this.index].style.displa=="none")返回的是false
                  第二次点击时,才返回true。明明第一次点击的时候aUl[this.index].style.displa是隐藏的
                  不知道为什么会出现这个情况
               * */
                if(aUl[this.index].style.display=="block")
                {
                   // aUl[this.index].className="sub";
                   // 若点击的一级标题下的二级标题为block,则隐藏该二级标题并且恢复箭头
                   aUl[this.index].style.display="none";
                    this.className="";

                }
                else
                {
                    //否则,先将所有的箭头先恢复正常
                    for(var j=0;j<aLi.length;j++)
                    {
                        aLi[j].className="";
                    }
                    //再将点击的箭头添加类,即箭头旋转90度
                    this.className="current";
                    //先将所有的二级标题隐藏
                    for(var k=0;k<aUl.length;k++)
                    {
        // 和38那个对比,为何这个不能使用添加class的方法,因为sub这个class本身是none,感觉是权限问题
                       // aUl[k].className="sub";
                        aUl[k].style.display="none";
                    }
                    //再将点击的一级标题下的二级标题显示
                    //aUl[this.index].className="show";
                    aUl[this.index].style.display="block";
                }

            }
        }
    }
</script>
</head>
<body>
<ul class="nav">
    <li>1一级菜单<span></span>  <ul class="sub">
            <li>二级菜单1</li>
            <li>二级菜单1</li>
            <li>二级菜单1</li>
            <li>二级菜单1</li>
            <li>二级菜单1</li>
        </ul></li>
    <li>2一级菜单<span></span>  <ul class="sub">
            <li>二级菜单2</li>
            <li>二级菜单2</li>
            <li>二级菜单2</li>
            <li>二级菜单2</li>
            <li>二级菜单2</li>
        </ul></li>
    <li>3一级菜单<span></span>  <ul class="sub">
            <li>二级菜单3</li>
            <li>二级菜单3</li>
            <li>二级菜单3</li>
            <li>二级菜单3</li>
            <li>二级菜单3</li>
        </ul></li>
    <li>4一级菜单<span></span>  <ul class="sub">
            <li>二级菜单4</li>
            <li>二级菜单4</li>
            <li>二级菜单4</li>
            <li>二级菜单4</li>
            <li>二级菜单4</li>
        </ul></li>
    <li>5一级菜单<span></span>  <ul class="sub">
            <li>二级菜单5</li>
            <li>二级菜单5</li>
            <li>二级菜单5</li>
            <li>二级菜单5</li>
            <li>二级菜单5</li>
        </ul></li>
    <li>6一级菜单<span></span>  <ul class="sub">
            <li>二级菜单6</li>
            <li>二级菜单6</li>
            <li>二级菜单6</li>
            <li>二级菜单6</li>
            <li>二级菜单6</li>
        </ul></li>
    <li>7一级菜单<span></span>  <ul class="sub">
            <li>二级菜单7</li>
            <li>二级菜单7</li>
            <li>二级菜单7</li>
            <li>二级菜单7</li>
            <li>二级菜单7</li>
        </ul></li>
    <li>8一级菜单<span></span>  <ul class="sub">
            <li>二级菜单8</li>
            <li>二级菜单8</li>
            <li>二级菜单8</li>
            <li>二级菜单8</li>
            <li>二级菜单8</li>
        </ul></li>
</ul>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值