国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

原生JS實現N級菜單的代碼

2019-11-19 16:32:06
字體:
來源:轉載
供稿:網友

需求分析

簡單的分析一下,要實現N級菜單,首先從布局入手,即判斷是否有下級菜單

1.沒有下一級菜單,直接排列

2.有下級菜單,又分為下級菜單排放位置,和在上級菜單顯示類似 '>' 的符號,效果如圖:

圖:1

 初步實現

1.實現是否存在   >

注意: 下面凡是擔憂 xxx===yyy ? xxx : xxx都是利用三元表達式,來表達思路。

HTML結構如下:

圖:2

•要實現圖一的效果,我們只需要判斷li標簽里面的children.length===2 ? 'span存在' : 'span移除'

2.下級菜單出現位置

HTML結構如下:

•實現這一需求,也需要判斷children.length===2 ? '上級菜單相對定位, top為0,left為上級的offsetWidth,下級菜單絕對定位' : '不做任何處理'

具體代碼即實現

效果圖如下:

代碼如下:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Document</title>  <style type="text/css">    * {      margin: 0;      padding: 0;    }    #box {      margin: 200px 0 0 50px;      text-align: center;      color: #ccc;    }    ul {      list-style: none;      float: left;    }    li {      width: 150px;      height: 40px;      line-height: 40px;      background-color: #124520;      border: 1px solid #eee;      position: relative;    }    li span {      position: absolute;      top: 0;      right: 10px;    }    li:hover {      background-color: #666;      transition: background-color .5s;    }    ul {      display: none;    }    ul.first {      display: block;    }    .relative {      position:relative;      top: 0;      left: 0;    }    .absolute {      position: absolute;      left: 0;      top: 0;    }    .show {      display: block;    }    .hide {      display: none;    }  </style></head><body>  <div id="box">    <ul class="first">      <li>一級菜單        <span>></span>      </li>      <li>一級菜單        <span>></span>        <ul>          <li>二級菜單            <span>></span>            <ul>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>            </ul>          </li>          <li>二級菜單            <span>></span>            <ul>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>            </ul>          </li>          <li>二級菜單            <span>></span>          </li>          <li>二級菜單            <span>></span>            <ul>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>            </ul>          </li>        </ul>      </li>      <li>一級菜單        <span>></span>        <ul>          <li>二級菜單            <span>></span>          </li>          <li>二級菜單            <span>></span>            <ul>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>            </ul>          </li>          <li>二級菜單            <span>></span>            <ul>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>            </ul>          </li>          <li>二級菜單            <span>></span>            <ul>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>              <li>三級菜單                <span>></span>              </li>            </ul>          </li>        </ul>      </li>      <li>一級菜單        <span>></span>      </li>    </ul>  </div></body><script type="text/javascript">let uls = document.querySelectorAll("ul"); //獲取所有的ullet lis = document.querySelectorAll("li"); //獲取所有的lilet liWidth = document.querySelector("#box ul").offsetWidth-2 //li的寬度 -2是為了好看/* 布局start *//* *  * 通過下面布局中代碼實現每個 li.children.length 要么為0 要么為2 * 0 無下級菜單 * 2 有下級菜單 *  */for (let i = uls.length - 1; i >= 0; i--) {  if(uls[i].parentNode.nodeName === "LI") {    uls[i].parentNode.classList.add("relative"); //相對定位    uls[i].classList.add("absolute"); // 絕對定位    uls[i].style.left = liWidth + "px";   }}for (var i = 0; i < lis.length; i++) {  if( lis[i].children.length === 1) { //沒有下一級菜單直接刪除    lis[i].children[0].outerHTML = "";  };}/* 布局end */for (let i = 0; i < lis.length; i++) { // 控制每一個li  lis[i].onmouseover = function() {    if( lis[i].children.length === 2) {      this.children[1].classList.remove("hide");      this.children[1].classList.add("show");    }   }  lis[i].onmouseout = function() {    if( lis[i].children.length === 2) {      this.children[1].classList.remove("show");      this.children[1].classList.add("hide");    }  }}</script></html>

以上所述是小編給大家介紹的原生JS實現N級菜單的代碼,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上思县| 潢川县| 福清市| 五大连池市| 乌恰县| 华安县| 张北县| 宜阳县| 迭部县| 盐津县| 邻水| 烟台市| 莫力| 临武县| 桃园县| 民县| 团风县| 邢台县| 永靖县| 虹口区| 佳木斯市| 当阳市| 靖远县| 绍兴市| 淄博市| 土默特左旗| 长阳| 吕梁市| 佛学| 丹江口市| 遵义市| 库尔勒市| 遂川县| 苍溪县| 威宁| 类乌齐县| 股票| 开远市| 遂昌县| 凤庆县| 龙井市|