用JS做的简单的可折叠的两级树形菜单

yizhihongxing

下面我将详细讲解使用JS实现一个简单的可折叠两级树形菜单的攻略。

准备工作

首先,我们需要准备一些基本的html和css代码,用于渲染出菜单的样式和结构。下面是一个简单的示例结构:

<div class="menu">
  <ul>
    <li><a href="#">菜单1</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="#">菜单2</a>
      <ul>
        <li><a href="#">子菜单1</a></li>
        <li><a href="#">子菜单2</a></li>
      </ul>
    </li>
    <li><a href="#">菜单3</a>
      <ul>
        <li><a href="#">子菜单1</a></li>
        <li><a href="#">子菜单2</a></li>
        <li><a href="#">子菜单3</a></li>
        <li><a href="#">子菜单4</a></li>
      </ul>
    </li>
  </ul>
</div>

接下来,我们需要为菜单的展开和折叠添加样式。下面是一个简单的样式示例:

.menu li ul {
  display: none;
}
.menu li.open ul {
  display: block;
}

上述样式中,我们使用了CSS选择器来隐藏所有的子菜单,同时为展开状态的菜单添加了.open类,用于显示对应的子菜单。

实现折叠展开功能

接下来,我们需要使用JS来实现菜单的折叠和展开功能。我们可以通过给菜单添加点击事件来实现这个功能。下面是一个简单的示例:

var menuItems = document.querySelectorAll(".menu > ul > li");
menuItems.forEach(function(menuItem) {
  menuItem.addEventListener("click", function() {
    this.classList.toggle("open");
  });
});

上述代码中,我们首先使用document.querySelectorAll方法来获取所有一级菜单。然后,我们对每个菜单项都添加了一个click事件监听器,在点击菜单项时切换.open类,实现菜单的折叠和展开。

绑定事件监听器

最后一步,我们需要确保菜单项的子菜单也能够折叠和展开。为此,我们需要在子菜单实际展开时,添加事件监听器。下面是一个示例代码:

var subMenuItems = document.querySelectorAll(".menu > ul > li > ul > li");
subMenuItems.forEach(function(subMenuItem) {
  subMenuItem.addEventListener("click", function(event) {
    event.stopPropagation();
  });
});

上述代码中,我们首先使用document.querySelectorAll方法来获取所有二级菜单项。然后,我们对每个子菜单项都添加了一个click事件监听器,通过event.stopPropagation()方法来阻止点击事件冒泡,确保子菜单项的点击行为不会触发父级菜单的折叠或展开行为。

示例说明

上述示例中,展示了一个标准的两级菜单,使用了上述的HTML、CSS和JS代码进行实现。

该示例展示了如何将上述的代码扩展到多级菜单,并添加了更多的样式以实现更好的视觉效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用JS做的简单的可折叠的两级树形菜单 - Python技术站

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

相关文章

  • javaScript array(数组)使用字符串作为数组下标的方法

    使用字符串作为数组下标的方法在Javascript中称为关联数组。下面是实现关联数组的步骤以及示例说明。 1. 声明一个空数组 首先,我们需要声明一个空数组作为基础。 let myArray = []; 2. 使用字符串下标存储值 接下来,我们可以使用字符串作为数组的下标存储值。 myArray["name"] = "Lucy&…

    JavaScript 2023年5月27日
    00
  • JavaScript实现汉字转换为拼音及缩写的方法示例

    针对JavaScript实现汉字转换为拼音及缩写的方法,我将详细讲解以下的攻略: 准备工作 在实现汉字转拼音及缩写之前,我们需要先下载一个JavaScript拼音库,常用的库有pinyin和pinyin-engine。下面以pinyin库为例,讲述如何使用。 步骤如下: 在html中引入pinyin.js库: “`html “` 安装pinyin库: 在…

    JavaScript 2023年5月19日
    00
  • 浅谈golang的http cookie用法

    浅谈golang的http cookie用法 什么是Cookie? HTTP协议是无状态的,也就是说,当客户端加载一个页面或者访问一个接口时,服务器并不知道这个请求与之前的请求之间有关系,而Cookie就是为了解决这个问题的,它可以把一些关键性的信息,如用户的登录状态等,保存在客户端,以便在后续的请求中向服务器传递这些信息。 Cookie有两种类型,分别是s…

    JavaScript 2023年6月11日
    00
  • js使用文件流下载csv文件的实现方法

    要实现通过 JavaScript 使用文件流下载 CSV 文件可以按以下步骤进行: 第一步:构造数据 首先需要将要下载的 CSV 文件内容组织成符合格式的数据,可以使用字符串拼接或者使用第三方库生成: const data = [ [‘姓名’, ‘性别’, ‘年龄’], [‘张三’, ‘男’, ’20’], [‘李四’, ‘女’, ’22’], [‘王五’,…

    JavaScript 2023年5月27日
    00
  • 微信小程序开发animation心跳动画效果

    下面是关于微信小程序开发animation心跳动画效果的完整攻略: 一、准备工作 在微信开发者工具中创建一个新的小程序项目。 在项目根目录下创建一个 animation 文件夹,用于存放心跳动画所需的图片资源。 二、设计心跳动画 在 animation 文件夹中准备两张心形图片,大小可以根据自己的需求而定。 在小程序页面的 wxml 文件中将两张图片插入。 …

    JavaScript 2023年6月11日
    00
  • javascript 24小时弹出一次的代码(利用cookies)

    针对“javascript 24小时弹出一次的代码(利用cookies)”这个问题,我可以给你讲解一下完整的攻略。 什么是Cookie? 在开始讲解代码前,我们先简要介绍一下Cookie。Cookie是指浏览器保存在用户电脑上的一小段文本信息,一般用来记录用户在访问网站时的一些信息,例如用户名、购物车中的商品等。 Cookie主要有以下属性: 名称:一个唯一…

    JavaScript 2023年6月11日
    00
  • JS中2种定时器的使用及清除的实现

    JS中有两种定时器,分别是setInterval()和setTimeout(),这两种定时器都有其特殊的用处。下面我将为你详细讲解这两种定时器的使用方法和如何清除定时器。 setInterval()定时器 setInterval() 根据指定的周期(以毫秒为单位)来调度一个函数,函数会按照指定的周期被周期性地执行。setInterval函数接受两个参数——第…

    JavaScript 2023年6月11日
    00
  • Javascript Date getFullYear() 方法

    以下是关于JavaScript Date对象的getFullYear()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getFullYear()方法 JavaScript Date对象的getFullYear()方法返回一个表示年的四位数字。该方法可用获取当前日期的年份。 下是使用Date对象的getFullYear()方法的示例:…

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