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

如何实现从右侧滑入的多级ul li横向滑动菜单

移动端层级菜单切换实现(右侧滑入替换效果)

我有一个嵌套结构的ul/li菜单,想要实现类似移动端菜单的点击切换效果:点击菜单项后,对应的.submenu子菜单从右侧滑入并替换上一级菜单。当前HTML结构如下:

<ul class="list-style-none">
   <li class="li-select">
      <div class="row">
         <div class="col-md-8">
            Toys
         </div>
         <div class="col-md-4 text-right"><i class="w-icon-angle-right li-select"></i></div>
      </div>
      <ul class="submenu">
         <li class="li-select">
            <div class="row">
               <div class="col-md-8">
                  Baby Toys and Scrabbles
               </div>
               <div class="col-md-4 text-right"><i class="w-icon-angle-right li-select"></i></div>
            </div>
            <ul class="submenu">
               <li class="li-select">
                  <div class="row">
                     <div class="col-md-8">
                        Used Baby Toys and Scrabbles
                     </div>
                     <div class="col-md-4 text-right"><i class="w-icon-angle-right li-select"></i></div>
                  </div>
                  <ul class="submenu">
                     <li class="li-select">
                        <div class="row">
                           <div class="col-md-8">
                              Cheap Toys
                           </div>
                           <div class="col-md-4 text-right"><i class="w-icon-angle-right li-select"></i></div>
                        </div>
                     </li>
                  </ul>
               </li>
            </ul>
         </li>
      </ul>
   </li>
   <li class="li-select">
      <div class="row">
         <div class="col-md-8">
            Cars
         </div>
         <div class="col-md-4 text-right"><i class="w-icon-angle-right li-select"></i></div>
      </div>
      <ul class="submenu">
         <li class="li-select">
            <div class="row">
               <div class="col-md-8">
                  Jeep
               </div>
               <div class="col-md-4 text-right"><i class="w-icon-angle-right li-select"></i></div>
            </div>
            <ul class="submenu">
               <li class="li-select">
                  <div class="row">
                     <div class="col-md-8">
                        Used jeep
                     </div>
                     <div class="col-md-4 text-right"><i class="w-icon-angle-right li-select"></i></div>
                  </div>
               </li>
            </ul>
         </li>
      </ul>
   </li>
</ul>

现有jQuery代码只能实现上下滑动切换,不符合需求:

$('.li-select').on('click', function(e){
    $(this).closest('li').find('ul.submenu').first().slideToggle("fast");
});

解决方案

要实现右侧滑入替换的效果,需要结合CSS定位+过渡动画,同时修改jQuery逻辑来控制菜单的显示/隐藏层级:

1. 添加CSS样式

给菜单容器和子菜单设置基础布局与动画效果:

/* 菜单容器:限制宽度、溢出隐藏、相对定位 */
.list-style-none {
    position: relative;
    width: 100%;
    max-width: 300px;
    overflow: hidden;
    list-style: none;
    padding: 0;
    margin: 0;
}

/* 菜单项:宽度100%、相对定位 */
.list-style-none > li,
.submenu > li {
    position: relative;
    width: 100%;
}

/* 子菜单:默认移出可视区域,添加过渡动画 */
.submenu {
    position: absolute;
    top: 0;
    left: 100%;
    width: 100%;
    list-style: none;
    padding: 0;
    margin: 0;
    transition: transform 0.3s ease, opacity 0.2s ease;
    transform: translateX(100%);
    opacity: 0;
    visibility: hidden;
}

/* 激活状态:子菜单滑入可视区域 */
.submenu.active {
    transform: translateX(0);
    opacity: 1;
    visibility: visible;
}

/* 隐藏上一级菜单:配合子菜单激活时的视觉替换 */
.menu-hidden {
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.2s ease, visibility 0.2s ease;
}

2. 优化HTML与修改jQuery代码

先给每个子菜单添加返回按钮(提升用户体验),在每个.submenu的开头插入:

<li class="li-select back-btn">
    <div class="row">
        <div class="col-md-8">← 返回</div>
        <div class="col-md-4 text-right"></div>
    </div>
</li>

然后修改jQuery逻辑,实现层级切换与返回功能:

$('.li-select').on('click', function(e) {
    e.stopPropagation();
    const $currentLi = $(this).closest('li');
    const $submenu = $currentLi.find('ul.submenu').first();

    // 处理返回按钮逻辑
    if ($(this).hasClass('back-btn')) {
        const $parentMenu = $currentLi.closest('.submenu');
        const $parentLi = $parentMenu.closest('li');
        
        $parentMenu.removeClass('active');
        $parentLi.removeClass('menu-hidden');
        return;
    }

    // 处理子菜单展开逻辑
    if ($submenu.length > 0) {
        $currentLi.addClass('menu-hidden');
        $submenu.addClass('active');
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:20:49