You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现带动画效果的侧滑式汉堡响应式导航菜单

带动画的侧滑式汉堡导航实现方案

原有index.html结构不需要做任何修改,已满足侧滑导航的DOM要求,仅需补充样式、更新交互逻辑即可。

1. 补充/调整样式代码

1.1 必要小调整(原有规则修改)

找到原有.hamburger样式中的z-index: 1配置,修改为z-index: 999,保证汉堡按钮始终在侧滑导航最上层,不会被遮挡导致无法点击关闭。

1.2 新增SASS规则(直接追加到style.sass末尾即可)

/* 移动端侧滑导航基础样式 */
.mobile-nav
    position: fixed
    top: 0
    right: 0
    width: 280px
    min-height: 100vh
    padding-top: 96px
    background-color: $dark
    z-index: 98
    transform: translateX(100%)
    transition: 0.4s ease-in-out
    display: flex
    flex-direction: column
    gap: 8px
    a
        display: block
        padding: 16px 32px
        color: $light
        font-size: 18px
        font-weight: 600
        text-decoration: none
        transition: 0.3s
        opacity: 0
        transform: translateX(20px)
    a.is-active, a:hover
        background-color: $primary
        color: #fff

/* 导航打开状态 */
.mobile-nav.is-open
    transform: translateX(0)
    a
        opacity: 1
        transform: translateX(0)
    /* 菜单项错峰入场延迟 */
    a:nth-child(1)
        transition-delay: 0.1s
    a:nth-child(2)
        transition-delay: 0.15s
    a:nth-child(3)
        transition-delay: 0.2s
    a:nth-child(4)
        transition-delay: 0.25s

/* 半透明遮罩层 */
body::after
    content: ''
    position: fixed
    inset: 0
    background-color: rgba(0,0,0,0.5)
    opacity: 0
    pointer-events: none
    transition: 0.3s
    z-index: 97
body.nav-open::after
    opacity: 1
    pointer-events: auto

/* PC端隐藏移动端导航 */
@media (min-width: 768px)
    .mobile-nav, body::after
        display: none

如果直接修改编译后的CSS文件,把SASS变量替换为对应色值即可:$primary: #8c38ff、$light: #eeeeee、$dark: #212121。

2. 更新main.js交互逻辑

替换原有main.js的全部代码即可,保留原有汉堡按钮变形动画的同时,新增侧滑导航控制、遮罩点击关闭、菜单项点击自动关闭功能:

const hamburgerBtn = document.querySelector('.hamburger')
const mobileNav = document.querySelector('.mobile-nav')
const pageBody = document.body

// 汉堡按钮点击切换导航状态
hamburgerBtn.addEventListener('click', () => {
    hamburgerBtn.classList.toggle('is-active')
    mobileNav.classList.toggle('is-open')
    pageBody.classList.toggle('nav-open')
})

// 点击遮罩区域关闭导航
pageBody.addEventListener('click', (e) => {
    if (e.target === pageBody && pageBody.classList.contains('nav-open')) {
        hamburgerBtn.classList.remove('is-active')
        mobileNav.classList.remove('is-open')
        pageBody.classList.remove('nav-open')
    }
})

// 点击移动端菜单项后自动关闭导航
mobileNav.querySelectorAll('a').forEach(navLink => {
    navLink.addEventListener('click', () => {
        hamburgerBtn.classList.remove('is-active')
        mobileNav.classList.remove('is-open')
        pageBody.classList.remove('nav-open')
    })
})

3. 最终效果

  • 默认状态下移动端导航完全移出屏幕右侧,不可见
  • 点击汉堡按钮时,导航以0.4s缓动动画从右侧滑入,菜单项按顺序错峰淡入,和汉堡图标变叉的动画节奏完全匹配
  • 导航展开时自动弹出半透明黑色遮罩,弱化主内容、突出导航层
  • 点击遮罩、任意移动端菜单项都会触发关闭动画,导航滑出屏幕,汉堡按钮恢复默认三条杠样式
  • 屏幕宽度≥768px时,移动端导航、遮罩、汉堡按钮自动隐藏,完全不影响原有PC端导航的显示逻辑

内容的提问来源于stack exchange,提问作者Saurn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:18:22