三级下拉菜单的js实现代码

实现三级下拉菜单需要用到js编程,下面是三级下拉菜单的JS实现代码的完整攻略。

步骤一:HTML代码

先创建一个HTML页面,用于容纳三级下拉菜单。其中需要有三个层级的<ul>标签,如下所示:

<nav>
  <ul>
    <li><a href="#">菜单1</a>
      <ul>
        <li><a href="#">子菜单1.1</a>
          <ul>
            <li><a href="#">子子菜单1.1.1</a></li>
            <li><a href="#">子子菜单1.1.2</a></li>
          </ul>
        </li>
        <li><a href="#">子菜单1.2</a></li>
      </ul>
    </li>
    <li><a href="#">菜单2</a></li>
    <li><a href="#">菜单3</a></li>
  </ul>
</nav>

步骤二:CSS代码

我们需要设置下拉菜单的样式,为此,在CSS中将以下这些样式规则应用于<ul><li>标记:

nav ul ul {
  display: none;
}
nav ul li:hover > ul {
  display: block;
}

步骤三:JS代码

现在,我们来实现JS代码,将下列代码添加到<head>标记之后:

window.onload = function() {
  var dropdowns = document.querySelectorAll('nav ul li ul');
  for (var i = 0; i < dropdowns.length; i++) {
    dropdowns[i].addEventListener('click', function(e) {
      e.stopPropagation();
    });
  }
}

此外,还需要一个函数用于在鼠标停留时切换下拉菜单。因此,应该添加以下代码:

function handleClick(e) {
  e.preventDefault();
  var submenu = this.parentNode.querySelector('ul');
  if (submenu) {
    var isVisible = submenu.style.display === 'block';
    dropdowns = document.querySelectorAll('ul ul');
    for (var i = 0; i < dropdowns.length; i++) {
      dropdowns[i].style.display = 'none';
    }
    if (!isVisible) {
      submenu.style.display = 'block';
    }
  }
}

最后,在for循环中添加下面的代码:

var toggles = document.querySelectorAll('nav ul li a');

我们的三级下拉菜单已经可以正常工作了。

示例说明

下面提供了两个例子,说明如何将上述代码应用于不同的网站。

示例一:使用CSS

基于Bootstrap框架的网站使用CSS代码来设定三级下拉菜单的宽度。网页头部如下:

<head>
  <!-- 引入Bootstrap框架 -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
  <style>
    /*调整下拉菜单的宽度*/
    .navbar .dropdown-menu .sub-menu {
      left: 100%; 
      position: absolute; 
      top: 0;
      visibility: hidden; 
      margin-top: -1px;
    }

    .navbar .dropdown-menu li:hover > .sub-menu {
      visibility: visible;
    }

    .navbar .dropdown:hover > .dropdown-menu {
      display: block;
    }   
  </style>
</head>

在列表中增加以下代码段:

<div class="navbar-collapse collapse">
  <ul class="nav navbar-nav">
    <li class="dropdown">
      <a href="#">菜单1</a>
      <ul class="dropdown-menu">
        <li><a href="#">子菜单1.1</a></li>
        <li class="dropdown dropdown-submenu">
          <a href="#">子菜单1<span class="caret"></span></a>
          <ul class="dropdown-menu sub-menu">
            <li><a href="#">子子菜单1.1.1</a></li>
            <li><a href="#">子子菜单1.1.2</a></li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#">菜单2</a></li>
    <li><a href="#">菜单3</a></li>
  </ul>
</div>

示例二:使用JavaScript

构建单独的JavaScript文件并使用基于函数handleClick的方法来创建三级下拉菜单。

<head>
  <script src="js/dropdown.js"></script>
  <link rel="stylesheet" href="css/style.css">
</head>

<body>
  <nav>
    <ul>
      <li><a href="#">菜单1</a>
        <ul>
          <li><a href="#">子菜单1.1</a>
            <ul>
              <li><a href="#">子子菜单1.1.1</a></li>
              <li><a href="#">子子菜单1.1.2</a></li>
            </ul>
          </li>
          <li><a href="#">子菜单1.2</a></li>
        </ul>
      </li>
      <li><a href="#">菜单2</a></li>
      <li><a href="#">菜单3</a></li>
    </ul>
  </nav>
</body>

dropdown.js中添加以下代码:

window.onload = function() {
  var dropdowns = document.querySelectorAll('nav ul li ul');
  for (var i = 0; i < dropdowns.length; i++) {
    dropdowns[i].addEventListener('click', function(e) {
      e.stopPropagation();
    });
  }
  var toggles = document.querySelectorAll('nav ul li a');
  for (var i = 0; i < toggles.length; i++) {
    toggles[i].addEventListener('click', handleClick);
  }
}

这种方法允许您使用纯JavaScript代码来实现三级下拉菜单,这将使您的页面加载更快,并且不需要依赖第三方库。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:三级下拉菜单的js实现代码 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS Reset 样式重置的实现示例

    以下是关于“CSS Reset 样式重置的实现示例”的完整攻略: 为什么需要 CSS Reset 当我们在开发网站时,浏览器对不同的 HTML 标签默认会有默认的样式,但不同的浏览器可能会有不同的默认样式。这些默认样式有时候可能会导致页面样式的差异化,比如行距、文字大小、边距等问题。为了解决这些问题,我们需要使用 CSS Reset 来重置浏览器的默认样式,…

    css 2023年6月10日
    00
  • Ajax实现表格中信息不刷新页面进行更新数据

    下面是关于“Ajax实现表格中信息不刷新页面进行更新数据”的完整攻略: 1. 简介 Ajax (Asynchronous JavaScript and XML) 可以让我们在不刷新页面的情况下,向服务器发送请求并在页面上显示更新的数据。这样可以增加用户的交互性和体验,提高网站的性能。 当表格数据需要更新而不希望出现页面的刷新时,我们可以通过Ajax来实现这一…

    css 2023年6月10日
    00
  • DIV+CSS命名规范全记录

    下面给您详细讲解“DIV+CSS命名规范全记录”的完整攻略。 一、 命名规范概述 在进行html和css代码编写过程中,采用良好命名规范是十分重要的,这样能将代码组织得更加简洁明了,有利于代码的维护和更新。 良好的命名规范有以下几点要求: 必须有意义,能准确描述所表示的内容; 避免出现过于宽泛的命名; 专注并确定性,最好不用缩写或缩短词汇的长度; 使用小写字…

    css 2023年6月10日
    00
  • CSS重要属性之 margin 属性知识大整合(必看篇)

    CSS 重要属性之 margin 属性知识大整合(必看篇) 什么是 margin? 在 CSS 中,margin 指的是页面元素的外边距,即一个元素与其周围元素之间的距离。 margin 的语法 margin 属性的语法如下: margin: top right bottom left; 其中,四个值分别表示上、右、下、左方向的外边距大小,也可以使用以下缩写…

    css 2023年6月9日
    00
  • 原生JS实现的轮播图功能详解

    现在我来详细为你讲解“原生JS实现的轮播图功能详解”的完整攻略,内容如下: 确定结构 在开始实现轮播图之前,首先要确定轮播图的结构,建议采用以下结构: <div class="carousel"> <ul class="carousel-list"> <li class="car…

    css 2023年6月10日
    00
  • JavaScript for in

    JavaScript中的for in语句是一种循环结构,可以用来遍历对象的属性。该语句的基本语法如下: for (variable in object){ // 循环体代码 } 其中,variable表示每次循环中的变量名称,它将依次获取对象object的每一个属性名;而object则是需遍历的对象。 在每次循环中,variable会被赋值为对象object…

    Web开发基础 2023年3月30日
    00
  • css3高级选择器使用方法

    下面是关于 “CSS3高级选择器使用方法” 的完整攻略。 1. 简介 CSS选择器是CSS规范中最基本的概念之一,它决定了一个元素应该如何被渲染。在 CSS3 中,新增了许多高级选择器,使得我们可以更精确地选取页面中的元素,从而提高我们的开发效率。 2. CSS3高级选择器 2.1 属性选择器 属性选择器是一种根据属性值来选择元素的CSS3选择器。常见的有下…

    css 2023年6月9日
    00
  • CSS3中的Media Queries学习笔记

    CSS3中的Media Queries学习笔记 什么是Media Queries Media Queries 是 CSS3 中的一个重要特性,它允许我们根据设备的特性(如屏幕宽度、高度、方向、分辨率等)来应用不同的样式。通过使用 Media Queries,我们可以为不同的设备提供不同的样式,从而实现响应式设计。 Media Queries 的语法 Medi…

    css 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部