当前位置:首页 > JavaScript

js 实现菜单下滑

2026-04-07 08:59:33JavaScript

实现菜单下滑效果

使用 JavaScript 实现菜单下滑效果可以通过 CSS 过渡(transition)或动画(animation)结合事件监听完成。以下是几种常见方法:

使用 CSS Transition 和 JavaScript 控制

通过添加/移除类名触发 CSS 过渡效果:

.menu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
}

.menu.active {
  max-height: 500px; /* 根据实际内容调整 */
}
const toggleBtn = document.querySelector('.toggle-btn');
const menu = document.querySelector('.menu');

toggleBtn.addEventListener('click', () => {
  menu.classList.toggle('active');
});

使用 JavaScript 动态计算高度

适合不确定菜单内容高度的情况:

const menu = document.querySelector('.menu');
menu.style.maxHeight = '0';

function toggleMenu() {
  if (menu.style.maxHeight === '0px') {
    menu.style.maxHeight = menu.scrollHeight + 'px';
  } else {
    menu.style.maxHeight = '0';
  }
}

使用 CSS Animation

纯 CSS 方案结合 JavaScript 触发:

@keyframes slideDown {
  from { max-height: 0; }
  to { max-height: 500px; }
}

.menu.animate {
  animation: slideDown 0.3s forwards;
}
document.querySelector('.toggle-btn').addEventListener('click', () => {
  const menu = document.querySelector('.menu');
  menu.classList.add('animate');
});

注意事项

  • 确保为菜单容器设置 overflow: hidden 属性
  • 使用 max-height 而非 height 可适应不同内容高度
  • 移动端考虑添加 transform: translateZ(0) 提升性能
  • 对于复杂动画,推荐使用 requestAnimationFrame

高级实现(带缓动函数)

使用自定义缓动函数实现更自然效果:

js 实现菜单下滑

function slideToggle(element, duration = 300) {
  const startHeight = element.offsetHeight;
  const startTime = performance.now();

  function animate(time) {
    const elapsed = time - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const ease = easeOutQuad(progress);

    if (startHeight === 0) {
      element.style.height = `${ease * element.scrollHeight}px`;
    } else {
      element.style.height = `${(1 - ease) * startHeight}px`;
    }

    if (progress < 1) {
      requestAnimationFrame(animate);
    }
  }

  function easeOutQuad(t) {
    return t * (2 - t);
  }

  requestAnimationFrame(animate);
}

标签: 菜单js
分享给朋友:

相关文章

vue elementui实现菜单

vue elementui实现菜单

Vue ElementUI 实现菜单 安装 ElementUI 确保项目已安装 Vue 和 ElementUI。若未安装,可以通过以下命令安装: npm install element-ui 在 m…

css制作横向菜单

css制作横向菜单

使用浮动(Float)实现横向菜单 将菜单项的 display 属性设置为 float: left,使列表项横向排列。清除浮动避免影响后续布局。 ul.horizontal-menu { lis…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

vue实现左右菜单

vue实现左右菜单

实现左右菜单的基本思路 使用Vue实现左右菜单通常需要两个主要组件:左侧的导航菜单和右侧的内容区域。左侧菜单负责导航功能,右侧区域根据菜单选择动态展示对应内容。 创建基本组件结构 在Vue项目中创建…