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

下面是 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正则表达式” 的完整攻略。 一、正则表达式 正则表达式是一种可以用于匹配文本特定模式的表达式,也可称之为正则或RegExp。JavaScript 支持正则表达式,其构造函数即RegExp。 1.1 正则表达式的构造函数 在 JavaScript 中 RegExp 是正则表达式的构造函数,我们可以使用它创建正则表达式,语法如下: va…

    JavaScript 2023年6月10日
    00
  • js中数组插入、删除元素操作的方法

    针对“js中数组插入、删除元素操作的方法”的完整攻略,我给您详细讲一下: 一、数组插入元素 1. push()方法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。 示例代码如下: let fruits = [‘apple’, ‘banana’, ‘orange’]; fruits.push(‘strawberry’); // 向数组末尾…

    JavaScript 2023年5月27日
    00
  • Javascript中string转date示例代码

    当我们在JavaScript中处理日期或时间时,有时需要将字符串类型的日期转换为日期对象,并使用Date()函数对其进行解析。下面是将字符串转换为Date对象的示例代码: var dateString = "2022-01-01"; var dateObj = new Date(dateString); 在上面的示例中,我们首先声明一个字…

    JavaScript 2023年6月10日
    00
  • JavaScript中windows.open()、windows.close()方法详解

    JavaScript中window.open()、window.close()方法详解 简介 window.open() 和 window.close() 是 JavaScript 常用方法之一,可以用于在新窗口打开 URL,或关闭现有窗口。本文将详细讲解使用这两个方法的相关知识。 window.open()方法 定义 window.open() 方法被用于…

    JavaScript 2023年6月11日
    00
  • JS正则截取两个字符串之间及字符串前后内容的方法

    让我来为您详细讲解“JS正则截取两个字符串之间及字符串前后内容的方法”的完整攻略。 正则截取两个字符串之间 如果您需要截取两个字符串中间的内容,可以使用正则表达式来完成。使用正则表达式的match方法,可以传入一个正则表达式,返回匹配到的字符串数组。 示例: const str = ‘hello world, my name is Jack’; const …

    JavaScript 2023年5月28日
    00
  • javascript使用btoa和atob来进行Base64转码和解码

    JavaScript中使用btoa()和atob()可以进行Base64编码和解码。Base64编码是将二进制数据编码成ASCII字符串的过程,解码则是将已编码的ASCII字符串还原为原始的二进制数据。 btoa()方法 btoa()方法可以将一个字符串进行Base64编码。 语法 string btoa(string) 参数 string: 待编码的字符串…

    JavaScript 2023年5月19日
    00
  • JavaScript在form表单中使用button按钮实现submit提交方法

    JavaScript是一种高级的编程语言,广泛用于web开发。在form表单中,我们可以使用button按钮实现提交方法。这里,我将向你介绍如何使用JavaScript来实现这个过程的完整攻略。 步骤一:创建form表单 首先,我们需要创建一个form表单。具体代码如下所示: <form id="myForm" action=&qu…

    JavaScript 2023年6月10日
    00
  • 深入理解JavaScript高级之词法作用域和作用域链

    深入理解JavaScript高级之词法作用域和作用域链 什么是词法作用域 词法作用域是指JavaScript代码的作用域是基于源代码中变量和函数声明的位置来确定的,而不是基于运行时的调用栈。换言之,词法作用域与代码的声明位置有关。 例如,下面的代码示例中,bar函数在foo函数内部定义,因此它的作用域(也称为“词法环境”)包含了foo函数范围内的变量,即x变…

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