首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js二级菜单 点击

在JavaScript中实现二级菜单的点击效果,通常涉及到HTML结构、CSS样式和JavaScript事件处理。以下是一个基本的实现示例:

HTML结构

代码语言:txt
复制
<ul class="menu">
  <li>
    <a href="#">菜单1</a>
    <ul class="submenu">
      <li><a href="#">子菜单1-1</a></li>
      <li><a href="#">子菜单1-2</a></li>
    </ul>
  </li>
  <li>
    <a href="#">菜单2</a>
    <ul class="submenu">
      <li><a href="#">子菜单2-1</a></li>
      <li><a href="#">子菜单2-2</a></li>
    </ul>
  </li>
</ul>

CSS样式

代码语言:txt
复制
.menu {
  list-style: none;
  padding: 0;
}

.menu > li {
  position: relative;
}

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

.submenu {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  background-color: #fff;
  border: 1px solid #ccc;
  list-style: none;
  padding: 0;
  min-width: 150px;
}

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

.submenu li a:hover {
  background-color: #f0f0f0;
}

JavaScript事件处理

代码语言:txt
复制
document.addEventListener('DOMContentLoaded', function() {
  const menuItems = document.querySelectorAll('.menu > li');

  menuItems.forEach(function(item) {
    item.addEventListener('click', function(event) {
      event.stopPropagation();
      const submenu = this.querySelector('.submenu');
      if (submenu) {
        submenu.style.display = submenu.style.display === 'block' ? 'none' : 'block';
      }
    });
  });

  // 点击页面其他地方时隐藏所有子菜单
  document.addEventListener('click', function() {
    const submenus = document.querySelectorAll('.submenu');
    submenus.forEach(function(submenu) {
      submenu.style.display = 'none';
    });
  });
});

解释

  1. HTML结构:创建一个包含主菜单和子菜单的列表结构。
  2. CSS样式:设置菜单和子菜单的基本样式,包括隐藏子菜单和设置子菜单的位置。
  3. JavaScript事件处理
    • 为主菜单项添加点击事件监听器,点击时切换子菜单的显示状态。
    • 使用event.stopPropagation()防止事件冒泡到文档,避免点击主菜单项时立即触发文档的点击事件。
    • 在文档上添加点击事件监听器,点击页面其他地方时隐藏所有子菜单。

应用场景

这种二级菜单的实现方式广泛应用于网站导航栏,特别是在需要展示更多选项而不占用过多页面空间的情况下。

可能遇到的问题及解决方法

  1. 子菜单不显示或显示不正确
    • 检查CSS样式是否正确应用,特别是.submenudisplay属性。
    • 确保HTML结构正确,子菜单确实在主菜单项内部。
  • 点击主菜单项时页面跳转
    • 在主菜单项的<a>标签中添加href="#",并在JavaScript中阻止默认行为(如上例所示)。
  • 子菜单在点击其他地方时不隐藏
    • 确保在文档上添加了点击事件监听器,并在该监听器中隐藏所有子菜单。

通过以上步骤,你可以实现一个基本的二级菜单点击效果,并根据需要进行调整和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • JS-鼠标经过显示二级菜单

    会在加完120后再执行,没想到他先执行的这个,并且弹出ullistElement,即说明他找到了subNav的ul, 问题来了,当加载完成后,请你尝试把鼠标再放到二级菜单上移动一下,你没选择一个二级菜单...,他就是把这三个alert再执行一遍,然后你就会看到ul的长度又加了20,当你不停的上下晃动鼠标,二级菜单就会不停的添加。...原因:这里,通过这个代码:alert(aLi.length);原因就明显了,因为开头的aLi,获得的是body中所有的li,包括二级菜单的。...就是说你在二级菜单的每一个li上晃一下,他都会认为你是在重新执行了aLi.onmouseover这个代码,流程就再走了一遍。...} } }   后来我也发现了收缩不干净,总是多出外面几像素,但是我把border删掉他就收缩干净了,我不知道在js

    8.2K100

    html二级菜单:DIV+CSS制作二级菜单(横排二级下拉菜单)以及二级菜单出现错位怎么解决「建议收藏」

    html二级菜单制作(横排二级下拉菜单)以及二级菜单出现错位怎么解决 摘要:DIV+CSS制作二级菜单(横排二级下拉菜单)以及二级菜单出现错位怎么解决(解决办法放在代码下面) 1.先看一下最终的效果图...布局思路:通过 ul li ul li的嵌套以及使用div 、css 、a三种标签来一起实现二级菜单。 具体步骤如下: 1....3.接着在一级菜单里嵌入二级菜单即一级菜单二级菜单 4.嵌入后接下来控制二级菜单的样式,通过绝对定位使二级菜单出现在一级菜单下然后隐藏即...5.最后,当鼠标移动到一级菜单上时二级菜单这时时显示不出来的,还需要添加“ul li:hover ul{ display:block}”使二级菜单显示出来;下面的文字部分和图片部分是用两个小盒子,通过类选择器独立控制各自的样式...注意点:盛放二级菜单的盒子宽度,要根据标签的宽度来决定 ;比如你的ul li {width: 60px;height:30px} 有六个一级菜单,那么60*6=360那么你的盒子的宽度要至少大于300左右

    5.6K10

    vue——二级菜单demo

    学习了vue,最近想着写一写demo练一练,今天写的二级菜单,中间踩过很多坑 1、存数据:最开始想着一级菜单存一个数组,二级菜单存不同的数组。...那么问题来了,一级菜单和二级菜单应该是超级相关联的,如果分开存储再去建立关系很麻烦,所以存在一个数组对象中,那么也就是说,不管多少级菜单都可以这样,又方便还不需要我们自己去建立相关关系。...3、绑定点击事件的a标签,我最开始不小心写了href属性,导致一个啥问题呢,就是我们点击后,页面就会刷新,数据又变成了我们之前的数据,就感觉只是闪一下的出现我们要的东西。... js"> js"> <link rel="stylesheet...name: '运动服务', //用于状态判定 flag: false, //二级菜单

    1.8K10

    纵向、横向导航菜单及二级弹出菜单

    一、纵向导航菜单及二级弹出菜单 首先在body中添加一个div标签,其中包含ulli ul的标签结构存放网站菜单,效果如下: <%@ page language="java" import="java.util...a{color:#000;text-decoration:none;} /*设置鼠标悬浮超链接上时改变字体颜色*/ a:hover{color:#F00;} 下面是将同一子菜单下的菜单移动位置变为父级菜单的一部分...我们要实现的效果是子菜单不占据空间,所以可以使用position:absolute;让子元素脱离文档流,使用left和top属性确定子菜单相对于父级菜单的位置。...,当鼠标离开父级菜单时隐藏子菜单,因此可以使用display的none属性隐藏菜单,当鼠标移动到父级菜单上时使用display:block显示菜单。...li>合作媒体 二、横向导航菜单及二级菜单

    5.4K30

    jQuery二级菜单的显示隐藏

    在jQuery中创建二级菜单的显示和隐藏可以通过使用事件处理函数和CSS样式来实现。HTML 结构 首先,需要创建适当的HTML结构来表示二级菜单。一种常见的方法是使用嵌套的和元素。...上述示例中,我们创建了一个包含两个菜单项和对应的二级菜单的导航栏。...每个菜单项都包含一个链接,以及一个嵌套的无序列表来表示二级菜单。CSS 样式 接下来,需要使用CSS样式来控制二级菜单的显示和隐藏。可以通过设置样式的display属性来实现。...然后,通过为父级菜单项设置:hover伪类选择器,当鼠标悬停在菜单项上时,显示相应的二级菜单。...当鼠标进入菜单项时,使用slideDown()方法显示相应的二级菜单。当鼠标离开菜单项时,使用slideUp()方法隐藏二级菜单。

    3.3K30
    领券