基于JavaScript实现多级菜单效果


Posted in Javascript onJuly 25, 2017

本文实例为大家分享了js实现多级菜单效果展示的具体代码,供大家参考,具体内容如下

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
      margin:0;
      padding:0;
      font-size:14px;
    }
    ul,li{
      list-style:none;
    }
    .box{
      margin:10px;
      padding:10px;
      width:300px;
      border:1px dashed #008000;
      /*渐进增强:首先设置一个纯色的背景,对于不兼容css3的浏览器来说会使用纯色,对于兼容的浏览器,我们在下面在额外的增加一些渐变色,这样会覆盖掉上面*/
      background:#ffe470;
      background:-webkit-linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);
      background:-moz-linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);
      background:-o-linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);
      background:linear-gradient(top left,#2b93d2,#fa5889,#cde074,#ffe470);
    }
    .box li{
      position:relative;
      line-height:30px;
    }
    .box em{
      position:absolute;
      top:7px;
      left:0;
      width:16px;
      height:16px;
      background:url("img/icon.png") no-repeat -59px -28px;
      cursor:pointer;

    }
    .box span{
      display:block;
      padding-left:20px;
    }
    .box em.open{
      background-position:-42px -28px;
    }
    .box .two{
      margin-left:20px;
    }
    .box .three{
      margin-left:40px;
    }
    .box .four{
      margin-left:60px;
    }
    .box .two,.box .three,.box .four{
      display:none;
    }
  </style>
</head>
<body>
  <div class='box' id='box'>
    <ul>
      <li>
        <em></em>
        <span>第一级第一个</span>
        <ul class='two'>
          <li><span>第二级第一个</span></li>
          <li>
            <em></em><span>第二级第二个</span>
            <ul class='three'>
              <li><span>第三极第一个</span></li>
              <li><span>第三极第二个</span></li>
              <li>
                <em></em><span>第三极第三个</span>
                <ul class='four'>
                  <li><span>第四级第一个</span></li>
                  <li><span>第四级第二个</span></li>
                  <li><span>第四级第三个</span></li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <em></em><span>第二级第三个</span>
            <ul class='three'>
              <li><span>第三级第一个</span></li>
              <li><span>第三级第二个</span></li>
              <li><span>第三级第三个</span></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
    <ul>
      <li>
        <em></em>
        <span>第一级第一个</span>
        <ul class='two'>
          <li><span>第二级第一个</span></li>
          <li>
            <em></em><span>第二级第二个</span>
            <ul class='three'>
              <li><span>第三极第一个</span></li>
              <li><span>第三极第二个</span></li>
              <li>
                <em></em><span>第三极第三个</span>
                <ul class='four'>
                  <li><span>第四级第一个</span></li>
                  <li><span>第四级第二个</span></li>
                  <li><span>第四级第三个</span></li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <em></em><span>第二级第三个</span>
            <ul class='three'>
              <li><span>第三级第一个</span></li>
              <li><span>第三级第二个</span></li>
              <li><span>第三级第三个</span></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>

  <script>
    var box = document.getElementById('box');
    //把列表中的span(前面有em的span)设置一个 cursor:pointer的样式
    var spanList = box.getElementsByTagName("span");
    for(var i = 0;i<spanList.length;i++){
      var curSpan = spanList[i];
      var curPre = utils.prev(curSpan);
      if(curPre && curPre.tagName.toLowerCase()==="em"){
        curSpan.style.cursor = "pointer"
      }

    }
    //使用事件委托实现我们的操作
    box.onclick = function(e){
      e = e || window.event;
      var tar = e.target || e.srcElement;

      //只有点击的是em或者span标签,我们才进行展开收缩的操作
      if(/^(em|span)$/i.test(tar.tagName)){
        var parent = tar.parentNode;//获取父亲
        var firstUl = utils.children(parent,"ul")[0]//获取父亲子集中的第一个ul标签
        var oEm = utils.children(parent,"em")[0]
        if(firstUl){
          //如果隐藏让显示,否则让隐藏
          var isBlock = utils.getCss(firstUl,"display") === "block" ? true : false;
          if(isBlock){
            firstUl.style.display = "none";
            if(oEm){
              utils.removeClass(oEm,"open")
            }
            //当外层的收起,里层所有的ul都要隐藏,所有的em都要移除open样式
            var allUl = parent.getElementsByTagName("ul"),allEm = parent.getElementsByTagName("em");
            for(var i = 0;i<allUl.length;i++){
              allUl[i].style.display = "none";
              utils.removeClass(allEm[i],"open");
            }
          }else{
            firstUl.style.display = "block";
            if(oEm){
              utils.addClass(oEm,"open")
            }
          }
        }

      }
    }
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 数据类型转换总结笔记
Jan 17 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
深入理解JS正则表达式---分组
Jul 18 Javascript
点击页面任何位置隐藏div的实现方法
Sep 05 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
Jun 12 Javascript
vue2中filter()的实现代码
Jul 09 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
Aug 22 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 Javascript
JS数组方法reverse()用法实例分析
Jan 18 Javascript
Vue实现手机计算器
Aug 17 Javascript
详解jQuery的核心函数和事件处理
Feb 18 jQuery
简单谈谈React中的路由系统
Jul 25 #Javascript
老生常谈js中的MVC
Jul 25 #Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 #Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
Jul 25 #Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 #Javascript
基于JavaScript实现百度搜索框效果
Jun 28 #Javascript
深入理解基于vue-cli的vuex配置
Jul 24 #Javascript
You might like
php 求质素(素数) 的实现代码
2011/04/12 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
php筛选不存在的图片资源
2015/04/28 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
JavaScript知识点整理
2015/12/09 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
python增加图像对比度的方法
2019/07/12 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
工业自动化专业毕业生推荐信
2013/11/18 职场文书
生产车间班组长岗位职责
2014/01/06 职场文书
公司薪酬管理制度
2014/01/31 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
2014年销售部工作总结
2014/12/01 职场文书
婚礼家长致辞
2015/07/27 职场文书
聘任合同书
2015/09/21 职场文书
入党申请书格式
2019/06/20 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python