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日

相关文章

  • 浅析CSS等高布局的6种方式

    浅析CSS等高布局的6种方式 CSS等高布局是指在一个网页中多个容器的高度相等,不管其中任何一个容器的高度发生了变化,其他容器也跟随进行调整。这篇文章将会介绍6种常用的CSS等高布局方法。 1. flexbox布局 flexbox是CSS3新增加的一种布局模式,可以很方便的实现网页的等高布局。其主要特点是元素可以沿着容器的主轴(main axis)或交叉轴(…

    css 2023年6月9日
    00
  • div+css与xhtml+css分别是什么意思?

    div+CSS 和 XHTML+CSS 都是 Web 前端开发中常用的技术,用于实现网页的布局和样式。下面将详细讲解这两种技术的含义和使用方法。 1. div+CSS 是什么意思? div+CSS 是一种基于 div 元素和 CSS 样式的网页布局技术。div 元素是 HTML 中的一个块级元素,可以用于划分网页的不同区域,然后使用 CSS 样式来控制这些区…

    css 2023年5月18日
    00
  • SEO 分享WEB标准对seo产生的影响

    当我们讲到 SEO 时,经常会听到一个词——”Web标准”。Web标准是一组规范和指南,用于规范 Web 开发过程中的 HTML、CSS 和 JavaScript。相信大家都知道,SEO 是指搜索引擎优化,其目的是为了提高网站在搜索引擎中的排名,Web标准对SEO产生了重要的影响,下面我将详细讲解。 一、Web标准的优势 提高网站性能。Web标准旨在提供更好…

    css 2023年6月11日
    00
  • 使用BootStrap建立响应式网页——通栏轮播图(carousel)

    让我为您讲解使用Bootstrap建立响应式网页通栏轮播图(carousel)的完整攻略。 1. 轮播图思路 通栏轮播图是一种经典的网页视觉设计方式。其基本思路是,在网页上设置一组横幅图片,通过轮播的方式定时向左或向右滑动,从而展现不同的广告或者信息。主要的视觉元素包括轮播组件(包括图片、标题和文字),箭头控制按钮(左和右)、指标控制按钮(可选)和全局容器。…

    css 2023年6月10日
    00
  • 有趣的思路~~JS仿 WINXP 注销桌面渐隐效果

    首先要说明的是,本文所提到的“有趣的思路~~JS仿 WINXP 注销桌面渐隐效果”并不是一篇攻略或是教程,而是原作者在探究实现该效果时的思路和分析过程,同时分享了部分代码实现。 接下来,我将根据原文的思路和参考代码进行简要的说明。 思路 实现该效果的主要思路如下: 制作一张覆盖整个网站的div,并设置其z-index值为最大,使其覆盖其他所有元素。 给该di…

    css 2023年6月10日
    00
  • CSS定义鼠标经过时鼠标图形的十五种样式整理

    下面将为您详细讲解“CSS定义鼠标经过时鼠标图形的十五种样式整理”的完整攻略。 什么是CSS定义鼠标经过时鼠标图形的样式? CSS定义鼠标经过时鼠标图形的样式,顾名思义,就是在鼠标经过某个元素时改变鼠标的样式。这在网页设计中是非常重要的,能够让用户提高交互性和体验感。 如何定义鼠标经过时鼠标图形的样式? 在CSS中,定义鼠标经过时鼠标图形的样式,可以使用以下…

    css 2023年6月10日
    00
  • CSS强制中英文换行与不换行 强制英文换行示例

    下面给您详细讲解“CSS强制中英文换行与不换行,强制英文换行示例”的完整攻略。 CSS强制中英文换行与不换行 在CSS中,通常默认是不换行的,当文本内容过长时会自动换行。如果我们需要强制换行或不换行,可以通过添加CSS属性来实现。 不换行 当我们想要强制不换行时,可以使用white-space属性将文本的空白符折叠,不允许在文本中插入换行,示例如下: div…

    css 2023年6月9日
    00
  • 鼠标移到图片上变大显示而不是放大镜效果

    鼠标移到图片上显示变大效果通常被称为“悬停放大效果”,可以通过CSS和JavaScript来实现。下面是实现该效果的完整攻略: 步骤一:准备HTML结构 首先需要在HTML中准备好要显示的图片,并为它们添加data-zoom属性,用于存放悬停后显示的图片。 示例HTML代码: <div class="image-container"…

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