JS实现快速的导航下拉菜单动画效果附源码下载

yizhihongxing

下面是 JS 实现快速的导航下拉菜单动画效果的完整攻略:

一、思路

  1. 首先,我们需要给下拉菜单添加一个点击事件,并在点击后显示子菜单;
  2. 接着,使用 CSS 中的 transition 属性实现下拉菜单的动画效果;
  3. 最后,用 JS 控制下拉菜单的显示和隐藏。

二、实现步骤

2.1 HTML 结构

首先,我们需要在 HTML 中添加一个导航栏和下拉菜单。

<nav>
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">About Us</a></li>
    <li><a href="#">Products</a>
      <ul>
        <li><a href="#">Product 1</a></li>
        <li><a href="#">Product 2</a></li>
        <li><a href="#">Product 3</a></li>
      </ul>
    </li>
    <li><a href="#">Contact Us</a></li>
  </ul>
</nav>

2.2 添加样式

为了让导航栏看起来更美观,我们需要添加一些 CSS 样式。具体样式可以根据自己的需求自行修改。

nav {
  background-color: #333;
  padding: 1rem 0;
}
nav ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
}
nav ul li {
  margin: 0 1rem;
  position: relative;
}
nav ul li > ul {
  display: none;
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  padding: 1rem;
  background-color: #fff;
  border-radius: 0.4rem;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
nav ul li:hover > ul {
  display: block;
}
nav ul li > ul li {
  margin: 0.5rem 0;
}

2.3 添加 JS 代码

接下来,我们需要添加 JS 代码来控制下拉菜单的显示和隐藏。

const navItems = document.querySelectorAll('nav ul li');

navItems.forEach(item => {
  // 监听点击事件
  item.addEventListener('click', e => {
    // 如果点击的是含有子菜单的列表项
    if (e.target.nextElementSibling) {
      // 阻止默认跳转行为
      e.preventDefault();
      // 隐藏所有其他下拉菜单
      navItems.forEach(item => {
        if (item !== e.currentTarget) {
          item.querySelector('ul').classList.remove('show');
        }
      });
      // 切换当前下拉菜单的显示状态
      e.currentTarget.querySelector('ul').classList.toggle('show');
    }
  });
});

注意:上面的代码中,我们使用了 classList 属性来操作 DOM 元素的 class 属性,其中 toggle() 方法可以在元素的 class 中添加/删除某个类。

2.4 添加 CSS 动画效果

最后一步,我们需要添加 CSS 动画效果,这里使用 transition 属性。

nav ul li > ul {
  display: none;
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translateX(-50%);
  padding: 1rem;
  background-color: #fff;
  border-radius: 0.4rem;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
  transition: all 0.3s ease;
  opacity: 0;
  pointer-events: none;
  z-index: 999;
}
nav ul li:hover > ul, nav ul li > ul.show {
  opacity: 1;
  pointer-events: auto;
}

注意:上述代码中,我们把 transitionopacitypointer-eventsz-index 添加到 CSS 中,通过这样设置,可以在菜单显示和隐藏时实现动画效果。

三、示例说明

3.1 示例一

接下来示例,是一个简单的导航栏实现,可以自行修改里面的内容和样式。

具体的代码和效果可以查看这个示例页面

3.2 示例二

这个示例是一个基于 React 的导航栏,同样可以自行修改里面的内容和样式。具体的代码和效果可以查看这个示例页面

四、总结

以上就是实现 JS 快速的导航下拉菜单动画效果的完整攻略。通过以上步骤,只需要简单的几行代码就可以快速实现下拉菜单动画效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现快速的导航下拉菜单动画效果附源码下载 - Python技术站

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

相关文章

  • js字符串操作总结(必看篇)

    下面我就来详细讲解一下“js字符串操作总结(必看篇)”的完整攻略。 JS字符串操作总结 字符串基础 在JS中,字符串是由一系列Unicode字符组成的字符序列。JavaScript中的字符串是不可变的,即一旦创建了一个字符串,就无法再对其进行修改。 字符串字面量 当我们需要使用字符串时,可以使用字符串字面量来创建一个字符串。在代码中,字符串字面量是由一对单引…

    JavaScript 2023年5月18日
    00
  • 在JavaScript中调用php程序

    当需要在JavaScript中调用php程序时,通常可以通过Ajax来实现。Ajax可以实现页面异步加载和更新,从而实现与服务器的后端交互。以下是完整攻略: 1. 发送Ajax请求 使用XMLHttpRequest对象发送Ajax请求,示例代码如下: function ajaxRequest() { var xhr = new XMLHttpRequest(…

    JavaScript 2023年5月27日
    00
  • 基于RequireJS和JQuery的模块化编程——常见问题全面解析

    标题:基于RequireJS和JQuery的模块化编程——常见问题全面解析 什么是模块化编程 模块化编程是指将一个复杂的程序拆分成多个模块,每个模块都具有独立的功能和接口,不同的模块可以灵活地组合在一起,构成复杂的应用程序。模块能够有效地提高代码的可重用性和可维护性,方便团队合作开发。 为何要使用RequireJS和JQuery RequireJS是一个AM…

    JavaScript 2023年5月27日
    00
  • JavaScript实现自动切换图片代码

    下面我来为您详细讲解“JavaScript实现自动切换图片代码”的完整攻略。 一、了解需求 首先我们需要了解实现自动切换图片所需的功能和需求: 显示多张图片,并实现自动切换; 当鼠标悬停在某个图片上时,停止自动切换,并显示当前的图片; 当鼠标离开时,继续自动切换。 二、代码实现 1. HTML部分 <div id="img-box"…

    JavaScript 2023年6月11日
    00
  • Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别

    一、Jsonp 关键字详解1. Jsonp的全称是“JSON with Padding”,即“带填充的JSON”。2. Jsonp是一种跨域请求方式,允许在不同域之间请求数据,常用于跨域解决方案。3. Jsonp的原理是利用script标签的src属性可以跨域加载资源的特性,通过在url中加入callback参数,将回调函数名传递给服务端,服务端返回一小段j…

    JavaScript 2023年5月27日
    00
  • srcElement表格样式

    srcElement 表示事件源对象,即触发该事件的元素。通过该属性,我们可以对事件源对象执行一些操作,比如修改元素的样式等。 在表格中,我们可以利用该属性来修改表格的样式,下面提供两个示例说明。 示例一:通过鼠标悬浮事件修改表格行背景色 <table> <tr> <th>姓名</th> <th>年…

    JavaScript 2023年6月10日
    00
  • JavaScript实现抖音罗盘时钟

    下面我将详细讲解如何用JavaScript实现抖音罗盘时钟。 准备工作 在编写JavaScript代码之前,我们需要先准备好HTML和CSS文件。HTML文件中包含了页面布局的基本结构,CSS文件中定义了页面对应的样式。具体代码如下: <!DOCTYPE html> <html lang="en"> <hea…

    JavaScript 2023年5月27日
    00
  • 跟我学习javascript的异步脚本加载

    下面我就为您详细讲解“跟我学习javascript的异步脚本加载”的完整攻略。 前言 网页应用程序通常需要使用JavaScript来实现复杂的交互逻辑。JavaScript是一种单线程语言,当代码需要联网或执行耗时操作时,会出现页面阻塞的现象,这就导致了JavaScript执行速度直接影响到用户的交互体验。因此,为了解决这个问题,JavaScript提供了一…

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