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

yizhihongxing

实现三级下拉菜单需要用到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日

相关文章

  • Vue3中使用defineCustomElement 定义组件详解

    下面我将为你详细讲解Vue3中使用defineCustomElement定义组件的完整攻略。 什么是defineCustomElement? 在Vue3中,我们可以通过defineCustomElement方法来定义一个自定义元素,自定义元素是Web Components技术的核心概念之一,它允许我们创建出具有完全自定义行为的HTML元素,它可以被认为是一种…

    css 2023年6月9日
    00
  • CSS届的绘图板CSS Paint API简介

    CSS Paint API 简介 CSS Paint API(CSS绘制API)是CSS的一个新功能,可以通过JavaScript来动态地绘制图像和图形,然后在网页中使用它们作为CSS背景、边框等样式的一部分。 CSS Paint API 的优点 可以动态地绘制图像和图形,使得样式更加灵活。 可以减少浏览器对于网络图片的请求次数,优化页面加载速度。 灵活的A…

    css 2023年6月9日
    00
  • CSS中的font-size属性使用教程

    下面是关于“CSS中的font-size属性使用教程”的详细攻略。 1. font-size属性概述 CSS的font-size属性用于设置网页上文字的大小。它支持以下几种单位: px: 像素单位,表示实际的像素点大小。 em: 相对长度单位,基于当前字体大小计算。比如如果当前字体大小是16px,1em就等于16px。 rem: 相对长度单位,基于根元素即H…

    css 2023年6月9日
    00
  • Zend Studio 实用快捷键一览表(精心整理)

    Zend Studio 实用快捷键一览表(精心整理) 前言 Zend Studio 是一款主要用于 PHP 开发的集成开发环境,提供了许多方便开发者的快捷键,可以大大提高开发效率。本文将为您详细讲解 Zend Studio 实用快捷键一览表。 常用快捷键列表 以下是 Zend Studio 中一些常用的快捷键: 编辑 新建文件:Ctrl + N 打开文件:C…

    css 2023年6月9日
    00
  • 如何使用less实现随机下雪动画详解

    如何使用less实现随机下雪动画 简介 在前端界,实现各种各样的动画效果是很普遍的需求。其中,下雪动画是一种常见而又有趣的效果。本文将介绍如何使用less实现随机下雪动画效果。 实现 首先,我们需要使用HTML和CSS来描述下雪的效果,具体如下: <div class="snow-container"> <div cla…

    css 2023年6月11日
    00
  • js实现图片无缝滚动特效

    下面是“js实现图片无缝滚动特效”的完整攻略: 简介 无缝滚动特效是网页设计中常用的效果之一,可以使页面更加生动和丰富。JS实现图片无缝滚动特效需要以下几个步骤: HTML布局; CSS样式; JS编写。 HTML布局 在HTML中,需要先设置好图片的容器和展示区域。 <div class="scroll-container"&gt…

    css 2023年6月11日
    00
  • css固定表头、行头样式代码

    要实现CSS固定表头、行头样式,一般采用CSS中的position属性。下面是完整攻略: 样式代码 table { width: 100%; border-collapse: collapse; border-spacing: 0; } thead, tbody, tr, td, th { display: block; } tr:after { conte…

    css 2023年6月10日
    00
  • css锚点定位被顶部固定导航栏遮住的解决方案

    针对CSS锚点定位被顶部固定导航栏遮住的问题,可以采用以下解决方案: 1. 设置固定导航栏的高度 在CSS中,将固定导航栏对应的class或id的height属性设置为固定值,例如60px。 .fixed-navbar { position: fixed; top: 0; left: 0; width: 100%; height: 60px; backgro…

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