js实现具有高亮显示效果的多级菜单代码

yizhihongxing

实现具有高亮显示效果的多级菜单代码需要以下步骤:

1.准备HTML结构

首先,需要准备一个基本的HTML结构。我们可以使用无序列表(ul)和有序列表(ol)来构建多级菜单。例如,下面是一个三级菜单结构:

<ul>
  <li><a href="#">一级菜单</a>
    <ul>
      <li><a href="#">二级菜单</a>
        <ul>
          <li><a href="#">三级菜单</a></li>
          <li><a href="#">三级菜单</a></li>
          <li><a href="#">三级菜单</a></li>
        </ul>
      </li>
      <li><a href="#">二级菜单</a></li>
      <li><a href="#">二级菜单</a></li>
    </ul>
  </li>
  <li><a href="#">一级菜单</a></li>
  <li><a href="#">一级菜单</a></li>
</ul>

2.使用CSS样式美化菜单

接下来,使用CSS样式对菜单进行美化。为了实现高亮显示效果,需要添加一个.hover类,用来表示鼠标移动到某个菜单项时的样式。同时,还要设置子菜单的样式,使其可以垂直显示。例如:

ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

li {
  position: relative;
}

a {
  display: block;
  padding: 10px;
  text-decoration: none;
  color: #333;
}

ul ul {
  position: absolute;
  top: 0;
  left: 100%;
  min-width: 200px;
  background-color: #f9f9f9;
  display: none;
}

li:hover > ul {
  display: block;
}

.hover {
  background-color: #c9c9c9;
}

.hover a {
  color: #fff;
}

3.使用JavaScript代码添加事件监听器

最后,需要使用JavaScript代码来添加事件监听器,实现点击菜单项时的高亮显示效果。可以使用事件委托技术,将事件监听器绑定在祖先元素上。当用户点击菜单项时,JavaScript代码会查找到该菜单项的祖先元素,并添加.hover类。同时,还要将同级菜单项的.hover类移除,保证每次只有一个菜单项被高亮显示。例如:

var menu = document.querySelector('ul');

menu.addEventListener('click', function(event) {
  var target = event.target;
  if (target.tagName === 'A') {
    event.preventDefault();
    var li = target.parentNode;
    var siblings = li.parentNode.children;
    for (var i = 0; i < siblings.length; i++) {
      var sibling = siblings[i];
      if (sibling !== li) {
        sibling.classList.remove('hover');
      }
    }
    li.classList.add('hover');
  }
});

这样就实现了一个具有高亮显示效果的多级菜单代码。下面分别给出两个示例说明。

示例一:基本菜单

以下是一个基本的两级菜单,当用户点击菜单项时,会高亮显示当前菜单项,同时去除同级菜单项的高亮。

<ul>
  <li><a href="#">首页</a></li>
  <li><a href="#">产品</a>
    <ul>
      <li><a href="#">产品1</a></li>
      <li><a href="#">产品2</a></li>
      <li><a href="#">产品3</a></li>
    </ul>
  </li>
  <li><a href="#">关于我们</a></li>
</ul>
ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

li {
  position: relative;
}

a {
  display: block;
  padding: 10px;
  text-decoration: none;
  color: #333;
}

ul ul {
  position: absolute;
  top: 0;
  left: 100%;
  min-width: 200px;
  background-color: #f9f9f9;
  display: none;
}

li:hover > ul {
  display: block;
}

.hover {
  background-color: #c9c9c9;
}

.hover a {
  color: #fff;
}
var menu = document.querySelector('ul');

menu.addEventListener('click', function(event) {
  var target = event.target;
  if (target.tagName === 'A') {
    event.preventDefault();
    var li = target.parentNode;
    var siblings = li.parentNode.children;
    for (var i = 0; i < siblings.length; i++) {
      var sibling = siblings[i];
      if (sibling !== li) {
        sibling.classList.remove('hover');
      }
    }
    li.classList.add('hover');
  }
});

示例二:三级菜单

以下是一个三级菜单,当用户点击菜单项时,会高亮显示当前菜单项,同时去除同级菜单项的高亮,并且展开下一级菜单。

<ul>
  <li><a href="#">首页</a></li>
  <li><a href="#">产品</a>
    <ul>
      <li><a href="#">产品1</a></li>
      <li><a href="#">产品2</a></li>
      <li><a href="#">产品3</a>
        <ul>
          <li><a href="#">产品3.1</a></li>
          <li><a href="#">产品3.2</a></li>
          <li><a href="#">产品3.3</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="#">关于我们</a></li>
</ul>
ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

li {
  position: relative;
}

a {
  display: block;
  padding: 10px;
  text-decoration: none;
  color: #333;
}

ul ul {
  position: absolute;
  top: 0;
  left: 100%;
  min-width: 200px;
  background-color: #f9f9f9;
  display: none;
}

li:hover > ul {
  display: block;
}

.hover {
  background-color: #c9c9c9;
}

.hover a {
  color: #fff;
}
var menu = document.querySelector('ul');

menu.addEventListener('click', function(event) {
  var target = event.target;
  if (target.tagName === 'A') {
    event.preventDefault();
    var li = target.parentNode;
    var siblings = li.parentNode.children;
    for (var i = 0; i < siblings.length; i++) {
      var sibling = siblings[i];
      if (sibling !== li) {
        sibling.classList.remove('hover');
      }
    }
    li.classList.add('hover');
  }
});

以上就是实现具有高亮显示效果的多级菜单代码的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现具有高亮显示效果的多级菜单代码 - Python技术站

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

相关文章

  • 在React中this容易遇到的问题详解

    在React中this容易遇到的问题详解 在React开发中,this这个关键字非常常用,但同时也很容易引起问题。接下来,本文将详细讲解在React中this容易遇到的问题,并提供相应的解决方法。 问题1:函数调用时this指向问题 在React中,我们一般使用bind绑定this来确保函数中的this指向正确。但是,有时我们会在组件渲染时动态传递数据,这时…

    JavaScript 2023年6月10日
    00
  • 通过JavaScript控制字体大小的代码

    控制字体大小是网页设计中常用的一项功能,本文将详细讲解如何通过JavaScript控制字体大小的代码。 如何通过JavaScript控制字体大小 我们可以通过修改元素的style属性来改变字体大小。以下是实现的步骤: 获取要改变字体大小的元素。可以使用document.getElementById()方法获取元素。 使用element.style.fontS…

    JavaScript 2023年6月11日
    00
  • js移动端事件基础及常用事件库详解

    JS移动端事件基础及常用事件库详解 随着移动端的普及,越来越多的网站需要对移动端进行支持。而移动设备和桌面设备不同,触摸屏幕是最主要的交互方式,因此在移动端开发中,事件处理是至关重要的。此文将讲解移动端事件基础概念及常用的事件库。 基础概念 Touch事件 一般来说,移动端只有一种事件——Touch事件。这个事件包含一系列的属性,其中最重要的是以下三个: e…

    JavaScript 2023年6月11日
    00
  • javascript实现手机震动API代码

    很好,下面是详细讲解 JavaScript 实现手机震动 API 代码的完整攻略: 1. 确认浏览器支持性 首先需要确认浏览器是否支持 Vibration API(震动 API)。可以通过以下代码来检测: // 判断浏览器是否支持 Vibration API(震动 API) if ("vibrate" in navigator) { co…

    JavaScript 2023年6月11日
    00
  • javaScript嗅探执行神器-sniffer.js

    我来为你详细讲解一下“JavaScript嗅探执行神器-sniffer.js”的完整攻略。 什么是JavaScript嗅探执行神器-sniffer.js? “JavaScript嗅探执行神器-sniffer.js”是一个轻量级的JavaScript库,它可以通过监听window对象上的事件或者重写window对象上的方法来获取并记录JavaScript代码的…

    JavaScript 2023年5月27日
    00
  • 全面理解JavaScript中的闭包

    闭包(Closure)是JavaScript中非常重要的一个概念,由于其灵活性和特殊性,很多初学者和部分开发者难以理解。理解闭包的概念对于攻克JavaScript的高级知识和框架有很大帮助。下面是全面理解JavaScript中的闭包的完整攻略: 一、什么是闭包 闭包指的是能够访问自由变量(非全局变量,即在外层函数中定义的变量)的函数。换句话说,如果一个函数内…

    JavaScript 2023年6月10日
    00
  • javascript函数以及基础写法100多条实用整理

    JavaScript函数是一段可以被反复调用执行的代码,这种代码的主要作用是完成一个独立的功能。JavaScript函数具有很高的可重用性和灵活性,常被用来封装一些特定的处理逻辑以便于在需要的时候调用。接下来将为大家介绍JavaScript函数的基础写法,包括参数、返回值、作用域、闭包等内容。 Function基础写法 无参函数 无参函数即不接受任何参数的函…

    JavaScript 2023年5月18日
    00
  • JavaScript实现随机点名小程序

    下面是JavaScript实现随机点名小程序的完整攻略: 确定需求 在实现随机点名小程序之前,需要确定具体的需求。本程序的功能主要是:随机从一组学生名单中选中一位学生,并将该学生的名字展示出来。在此基础上,还可以加入更多的功能,比如记录已经点名的学生,排除已经点名的学生,或者在每次点名之后自动刷新学生名单等等。 准备工作 在编写代码之前,需要准备好页面的布局…

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