jQuery垂直手風琴多級下拉菜單代碼http://www.lanrenzhijia.com/nav/4584.html

http://www.lanrenzhijia.com/nav/4584.html點擊打開鏈接

html代碼:

<!DOCTYPE html>
<html>

<head>

  <meta charset="UTF-8">

  <title>多級菜單</title>

  <meta name="viewport" content="width=device-width, initial-scale=1">
   <!-- Iconos -->
   <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">

    <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />

</head>

<body>
<div style="text-align:center;clear:both">
<!--<script src="/gg_bd_ad_720x90.js" type="text/javascript"></script>-->
<!--<script src="/follow.js" type="text/javascript"></script>-->
</div>
   <!-- Contenedor -->
   <ul id="accordion" class="accordion">
      <li>
         <div class="link"><!--<i class="fa fa-paint-brush"></i>-->Diseño web<i class="fa fa-chevron-down"></i></div>
         <ul class="submenu">
            <li>
               <div href="#" class="link">Photoshop<i class="fa fa-chevron-down"></i></div>
               <ul class="submenu">
                  <li>
                     <div class="link">測試1<i class="fa fa-chevron-down"></i></div>
                     <ul class="submenu">
                        <li><a href="#">測試123</a></li>
                        <li><a href="#">測試234</a></li>
                        <li><a href="#">測試345</a></li>
                     </ul>
                  </li>
                  <li><a href="#">測試2</a></li>
                  <li><a href="#">測試3</a></li>
               </ul>
            </li>
            <li><a href="#">HTML</a></li>
            <li><a href="#">CSS</a></li>
            <li><a href="#">Maquetacion web</a></li>
         </ul>
      </li>
      <li>
         <div class="link"><!--<i class="fa fa-code"></i>-->Desarrollo front-end<i class="fa fa-chevron-down"></i></div>
         <ul class="submenu">
            <li><a href="#">Javascript</a></li>
            <li><a href="#">jQuery</a></li>
            <li><a href="#">Frameworks javascript</a></li>
         </ul>
      </li>
      <li>
         <div class="link"><!--<i class="fa fa-mobile"></i>-->Diseño responsive<i class="fa fa-chevron-down"></i></div>
         <ul class="submenu">
            <li><a href="#">Tablets</a></li>
            <li><a href="#">Dispositivos mobiles</a></li>
            <li><a href="#">Medios de escritorio</a></li>
            <li><a href="#">Otros dispositivos</a></li>
         </ul>
      </li>
      <li><div class="link"><!--<i class="fa fa-globe"></i>-->Posicionamiento web<i class="fa fa-chevron-down"></i></div>
         <ul class="submenu">
            <li><a href="#">Google</a></li>
            <li><a href="#">Bing</a></li>
            <li><a href="#">Yahoo</a></li>
            <li><a href="#">Otros buscadores</a></li>
         </ul>
      </li>
   </ul>

  <script src='../js/jquery.min.js'></script>

  <script src="js/index.js"></script>

</body>

</html>

css代碼:

* {
   margin: 0;
   padding: 0;
   -webkit-box-sizing: border-box;
   -moz-box-sizing: border-box;
   box-sizing: border-box;
}

body {
   background: #2d2c41;
   font-family: 'Open Sans', Arial, Helvetica, Sans-serif, Verdana, Tahoma;
}

ul {
   list-style-type: none;
}

a {
   color: #b63b4d;
   text-decoration: none;
}

/** =======================
 * Contenedor Principal
 ===========================*/
h1 {
   color: #FFF;
   font-size: 24px;
   font-weight: 400;
   text-align: center;
   margin-top: 80px;
 }

h1 a {
   color: #c12c42;
   font-size: 16px;
 }

 .accordion {
   width: 100%;
   max-width: 360px;
   margin: 30px auto 20px;
   background: #FFF;
   -webkit-border-radius: 4px;
   -moz-border-radius: 4px;
   border-radius: 4px;
 }

.accordion .link {
   cursor: pointer;
   display: block;
   padding: 15px 15px 15px 42px;
   color: #4D4D4D;
   font-size: 14px;
   font-weight: 700;
   border-bottom: 1px solid #CCC;
   position: relative;
   -webkit-transition: all 0.4s ease;
   -o-transition: all 0.4s ease;
   transition: all 0.4s ease;
}

.accordion li:last-child .link {
   border-bottom: 0;
}

.accordion li i {
   position: absolute;
   top: 16px;
   left: 12px;
   font-size: 18px;
   color: #595959;
   -webkit-transition: all 0.4s ease;
   -o-transition: all 0.4s ease;
   transition: all 0.4s ease;
}

.accordion li i.fa-chevron-down {
   right: 12px;
   left: auto;
   font-size: 16px;
}

.accordion li.open>.link {
   /*color: #b63b4d;*/
   color:#595959;
}

.accordion li.open i {
   /*color: #b63b4d;*/
   color:#595959;
}
.accordion li.open>.link>i.fa-chevron-down {
   -webkit-transform: rotate(180deg);
   -ms-transform: rotate(180deg);
   -o-transform: rotate(180deg);
   transform: rotate(180deg);
}

/**
 * Submenu
 -----------------------------*/
 .submenu {
   display: none;
   background: #444359;
   font-size: 14px;
 }

 .submenu li {
   border-bottom: 1px solid #4b4a5e;
    background-color: #fff;
 }

 .submenu a {
   display: block;
   text-decoration: none;
   color: #595959;
   padding: 12px;
   padding-left: 42px;
   -webkit-transition: all 0.25s ease;
   -o-transition: all 0.25s ease;
   transition: all 0.25s ease;
 }

 .submenu a:hover {
   /*background: #b63b4d;*/
   color: #595959;
 }
 .accordion li ul li .link,.accordion li ul li a{
    padding-left:58px;
 }
.accordion li ul li ul li .link,.accordion li ul li ul li a{
   padding-left:68px;
}
.accordion li ul li ul li ul li a{
    padding-left:78px;
}

js代碼:

$(function() {
   var Accordion = function(el, multiple) {
      this.el = el || {};
        this.multiple = multiple || true;
      // Variables privadas
      var links = this.el.find('.link');
      // Evento
      links.on('click', {el: this.el, multiple: this.multiple}, this.dropdown)
   };

   Accordion.prototype.dropdown = function(e) {
      var $el = e.data.el,
         $this = $(this),
         $next = $this.next();

      $next.slideToggle();
      $this.parent().toggleClass('open');

      if (!e.data.multiple) {
         $el.find('.submenu').not($next).slideUp().parent().removeClass('open');
      };
   };

   var accordion = new Accordion($('#accordion'), false);
});

解釋:

  1. multiple的作用是用來控制是否能展開多個列表(這裏傳入false,每次就只能展開一個,展開另外一個就收起前面展開的)

  2. {el: this.el, multiple: this.multiple}這個就是傳入到函數裏面的數據data

  3. 所以在這裏e.data就相當於{el: this.el, multiple: this.multiple}那麼e.data.el就是取得其中的值了this.el。

  4. 然後就是$el.find('.submenu')這個選擇器取到了id爲accordion元素下面的所有class爲submenu的ul,但是這裏只要展開當前你點擊的li下面的ul。而不需要其他的展開。所以用到了.not($next).就是非當前點擊中的其他li下面的ul都隱藏。第一個問題的參數multiple就是用來判斷執不執行這句代碼

    if (!e.data.multiple) {

           $el.find('.submenu').not($next).slideUp().parent().removeClass('open');

    };

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章