jquery实现可点击伸缩与展开的菜单效果代码

这里简单讲解一下如何使用jQuery实现可点击伸缩与展开的菜单效果。

概述

这里将展示如何通过jQuery来实现一个可点击伸缩与展开的菜单效果,步骤如下:

  1. HTML结构:设置菜单的HTML结构,包含一级菜单和二级菜单。
  2. CSS样式:设置菜单的样式,使之具备可伸缩和展开的效果。
  3. jQuery脚本:通过jQuery脚本来实现菜单的点击伸缩与展开效果。

HTML结构

首先先来看一下需要实现的HTML结构,如下所示:

<div class="menu">
  <ul>
    <li><a href="#">菜单1</a>
      <ul>
        <li><a href="#">子菜单1-1</a></li>
        <li><a href="#">子菜单1-2</a></li>
      </ul>
    </li>
    <li><a href="#">菜单2</a>
      <ul>
        <li><a href="#">子菜单2-1</a></li>
        <li><a href="#">子菜单2-2</a></li>
      </ul>
    </li>
  </ul>            
</div>

这里我们采用ul和li的层级嵌套方式来实现菜单的伸缩与展开。

CSS样式

接下来先给菜单设置一些基本样式,再添加一些控制展开和收缩的样式。如下所示:

.menu ul{
  list-style:none;
  margin:0;
  padding:0;
}
/* 一级菜单 */
.menu > ul > li{
  position:relative;
  margin-bottom:1px;
  background:#eee;
}
/* 二级菜单 */
.menu ul ul{
  display:none;
}
.menu ul li ul li{
  background:#fff;
}
/* 控制展开和收缩的样式 */
.submenu-open:before{
  content: "-";
}
.submenu-closed:before{
  content: "+";
}

这里先设置了一级菜单和二级菜单的样式,以及控制展开和收缩的样式。其中,通过:before伪元素来控制‘-’和"+"的显示。

jQuery脚本

这是关键部分了,下面就来介绍如何通过jQuery脚本实现可点击伸缩与展开的菜单效果。如下所示:

$(function(){
  $('.menu li:has(ul)').addClass('submenu-closed').on('click', function(e) {
    e.stopPropagation();
    $(this).toggleClass('submenu-open').children('ul').slideToggle();
  });
});

这里采用了事件委托的方式来监听li元素的点击事件,其中surround元素为class为menu的元素,语法为$('.menu')。通过获得点击的元素的子类来进行下一步操作。

示例说明

示例1

通过一个简单的示例来看一下具体的效果。首先,我们加入一个HTML文档,并引入jQuery库。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>jQuery菜单效果</title>
  <style>
    .menu ul{
      list-style:none;
      margin:0;
      padding:0;
    }
    .menu > ul > li{
      position:relative;
      margin-bottom:1px;
      background:#eee;
    }
    .menu ul ul{
      display:none;
    }
    .menu ul li ul li{
      background:#fff;
    }
    .submenu-open:before{
      content: "-";
    }
    .submenu-closed:before{
      content: "+";
    }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script>
    $(function(){
      $('.menu li:has(ul)').addClass('submenu-closed').on('click', function(e) {
        e.stopPropagation();
        $(this).toggleClass('submenu-open').children('ul').slideToggle();
      });
    });
  </script>
</head>
<body>
  <div class="menu">
    <ul>
      <li><a href="#">菜单1</a>
        <ul>
          <li><a href="#">子菜单1-1</a></li>
          <li><a href="#">子菜单1-2</a></li>
        </ul>
      </li>
      <li><a href="#">菜单2</a>
        <ul>
          <li><a href="#">子菜单2-1</a></li>
          <li><a href="#">子菜单2-2</a></li>
        </ul>
      </li>
    </ul>            
  </div>
</body>
</html>

示例2

接下来为了证明示例1的正确运行,将增加一个更加复杂的菜单,包含多级伸缩和展开菜单。如下所示:

<div class="menu">
  <ul>
    <li><a href="#">菜单1</a>
      <ul>
        <li><a href="#">子菜单1-1</a></li>
        <li><a href="#">子菜单1-2</a></li>
        <li><a href="#">子菜单1-3+</a>
          <ul>
            <li><a href="#">子菜单1-3-1</a></li>
            <li><a href="#">子菜单1-3-2</a></li>
            <li><a href="#">子菜单1-3-3+</a>
              <ul>
                <li><a href="#">子菜单1-3-3-1</a></li>
                <li><a href="#">子菜单1-3-3-2</a></li>
                <li><a href="#">子菜单1-3-3-3+</a>
                  <ul>
                    <li><a href="#">子菜单1-3-3-3-1</a></li>
                    <li><a href="#">子菜单1-3-3-3-2</a></li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </li>
    <li><a href="#">菜单2+</a>
      <ul>
        <li><a href="#">子菜单2-1</a></li>
        <li><a href="#">子菜单2-2</a></li>
        <li><a href="#">子菜单2-3+</a>
          <ul>
            <li><a href="#">子菜单2-3-1</a></li>
            <li><a href="#">子菜单2-3-2</a></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>            
</div>

同样的操作,将其包含进示例1中,结果如下所示:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>jQuery菜单效果</title>
  <style>
    .menu ul{
      list-style:none;
      margin:0;
      padding:0;
    }
    .menu > ul > li{
      position:relative;
      margin-bottom:1px;
      background:#eee;
    }
    .menu ul ul{
      display:none;
    }
    .menu ul li ul li{
      background:#fff;
    }
    .submenu-open:before{
      content: "-";
    }
    .submenu-closed:before{
      content: "+";
    }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script>
    $(function(){
      $('.menu li:has(ul)').addClass('submenu-closed').on('click', function(e) {
        e.stopPropagation();
        $(this).toggleClass('submenu-open').children('ul').slideToggle();
      });
    });
  </script>
</head>
<body>
  <div class="menu">
    <ul>
      <li><a href="#">菜单1</a>
        <ul>
          <li><a href="#">子菜单1-1</a></li>
          <li><a href="#">子菜单1-2</a></li>
          <li><a href="#">子菜单1-3+</a>
            <ul>
              <li><a href="#">子菜单1-3-1</a></li>
              <li><a href="#">子菜单1-3-2</a></li>
              <li><a href="#">子菜单1-3-3+</a>
                <ul>
                  <li><a href="#">子菜单1-3-3-1</a></li>
                  <li><a href="#">子菜单1-3-3-2</a></li>
                  <li><a href="#">子菜单1-3-3-3+</a>
                    <ul>
                      <li><a href="#">子菜单1-3-3-3-1</a></li>
                      <li><a href="#">子菜单1-3-3-3-2</a></li>
                    </ul>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </li>
      <li><a href="#">菜单2+</a>
        <ul>
          <li><a href="#">子菜单2-1</a></li>
          <li><a href="#">子菜单2-2</a></li>
          <li><a href="#">子菜单2-3+</a>
            <ul>
              <li><a href="#">子菜单2-3-1</a></li>
              <li><a href="#">子菜单2-3-2</a></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>            
  </div>
</body>
</html>

总结

通过这个实例,我们学会了使用jQuery来实现可点击伸缩和展开的菜单效果,也加深了对jQuery的基本语法的理解。希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery实现可点击伸缩与展开的菜单效果代码 - Python技术站

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

相关文章

  • HTML5边玩边学(3)像素和颜色

    HTML5边玩边学(3)像素和颜色是一篇介绍HTML中像素和颜色的基础知识的文章。以下是它的完整攻略: 标题 HTML5边玩边学(3)像素和颜色 像素 像素(pixel)是一种用于测量屏幕分辨率的单位,通常用于衡量屏幕的清晰度。在HTML中,像素通常用来描述开发者定义的元素大小。实际上,浏览器根据不同的屏幕和设备,将像素映射为不同的比例。比如,在Retina…

    css 2023年6月9日
    00
  • HTML table 表格边框的实现思路

    下面是 HTML table 表格边框的实现思路的完整攻略。 1. 设置表格边框 要添加表格边框,可以使用 <table> 元素的 border 属性。border 属性接受一个正整数作为值,用来指定表格边框的宽度,如下所示: <table border="1"> <tr> <td>单元格 …

    css 2023年6月9日
    00
  • div css 滚动条样式 DIV滚动条属性及样式设置方式

    下面我将为您详细讲解“div css 滚动条样式 DIV滚动条属性及样式设置方式”的完整攻略。 简介 在网页设计中,滚动条是非常常见的组件之一。然而,浏览器默认的滚动条样式并不美观,甚至会影响您网页的大气和美观。为此,我们需要自定义滚动条样式,在这里我们就要介绍DIV滚动条属性及样式设置方式。 初步准备 先设定一个网页布局模板,并在其中加入一个 div 元素…

    css 2023年6月9日
    00
  • DW网页元素怎么制作渐隐渐现效果?

    当我们需要让网页元素渐隐渐现的效果时,可以使用CSS3中的transition属性来实现。下面是具体的步骤: 步骤一:定义元素基本样式 首先,需要定义元素的基本样式,包括宽高、背景颜色、位置等信息。例如,我们定义了一个div元素,样式如下: div { width: 200px; height: 200px; background-color: red; p…

    css 2023年6月10日
    00
  • springboot中的css样式显示不出了的几种情况

    Spring Boot中CSS样式无法显示的几种情况攻略 在Spring Boot项目中,CSS文件负责控制网页样式,让网页更加美观。然而,有时候我们会发现CSS样式无法显示,导致网页效果很奇怪,这是因为以下几种情况: 1. 路径问题 当CSS文件没有被正确地加载时,可能是因为路径设置不正确。在Spring Boot项目中,我们一般将CSS文件放在src/m…

    css 2023年6月9日
    00
  • js实现select选择框效果及美化

    下面是JS实现select选择框效果及美化的完整攻略: 1. 实现下拉框效果 1.1 HTML结构 首先需要一个select标签和对应的option标签,option标签的value属性存储选项的值。 HTML代码如下: <select id="select"> <option value="1"&g…

    css 2023年6月10日
    00
  • jquery属性过滤选择器使用示例

    当我们使用 jQuery 选取元素时,可以使用属性选择器来选择具有指定属性的元素。属性过滤选择器是基于这种思路工作的。 属性过滤选择器 属性过滤选择器使用属性名称和可选匹配规则来匹配一个或多个元素。下面是一些常用的属性过滤选择器: [attribute]:选择具有指定属性的元素。 [attribute=value]:选择具有指定属性且属性值等于指定值的元素。…

    css 2023年6月10日
    00
  • 5分钟教你学会超简单的html+css魔幻霓虹灯文字特效

    你好!关于“5分钟教你学会超简单的html+css魔幻霓虹灯文字特效”的攻略,下面给出详细的步骤说明。 一、所需基础知识 HTML基础语法 CSS基础语法 一些基础的CSS动画知识 二、步骤说明 1. 创建HTML文件 在任何文本编辑器中打开一个新文件,然后将以下代码复制到文件中。这是一个最基本的HTML骨架 <!DOCTYPE html> &l…

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