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

如何实现Dropdown Menu中的二级下拉展开功能?

实现二级下拉菜单功能

针对你提供的代码,要给"Dropdown Text"项添加二级下拉能力,点击它显示对应的隐藏文本,其他项保持非下拉状态,可按以下步骤修改:

1. 调整HTML结构

把原来的"Dropdown Text"项改成包含二级菜单的嵌套结构,给它标记特殊类区分普通项,同时添加二级下拉内容容器:

<div class="dropdown-item has-submenu">
  Dropdown Text
  <div class="sub-dropdown-content">
    <div class="sub-dropdown-item">二级文本1</div>
    <div class="sub-dropdown-item">二级文本2</div>
    <div class="sub-dropdown-item">二级文本3</div>
  </div>
</div>

2. 添加二级菜单的CSS样式

在原有<style>标签里补充二级菜单的样式,默认隐藏,点击后展开,同时给带二级菜单的项加箭头标识:

/* 二级下拉菜单默认隐藏 */
.sub-dropdown-content {
  display: none;
  flex-direction: column;
  margin-top: 8px;
  padding-left: 15px; /* 缩进区分层级 */
  align-items: flex-start;
}

/* 二级菜单项样式 */
.sub-dropdown-item {
  margin: 6px 0;
  cursor: pointer;
  color: #333;
}

/* 给带二级菜单的项添加箭头标识 */
.has-submenu::after {
  content: " ▼";
  font-size: 14px;
  margin-left: 4px;
}

/* 展开时切换箭头方向 */
.has-submenu.active::after {
  content: " ▲";
}

3. 更新JavaScript逻辑

添加处理二级菜单点击的逻辑,给所有带二级菜单的项绑定点击事件,切换二级菜单的显示状态:

// 处理二级下拉菜单
const subMenuTriggers = document.querySelectorAll('.has-submenu');
subMenuTriggers.forEach(trigger => {
  const subMenu = trigger.querySelector('.sub-dropdown-content');
  trigger.addEventListener('click', (e) => {
    e.stopPropagation(); // 防止事件冒泡触发父级菜单关闭
    subMenu.style.display = subMenu.style.display === 'none' ? 'flex' : 'none';
    trigger.classList.toggle('active'); // 切换箭头样式
  });
});

完整代码

整合所有修改后的完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dropdown Menu</title>
    <style>
        .custom-box {
            background-color: #ff5733;
            padding: 20px;
            border-radius: 10px;
            display: flex;
            flex-direction: column;
            align-items: center;
            text-align: center;
            font-family: Arial, sans-serif;
        }

        .box-title {
            font-size: 24px;
            font-weight: bold;
            color: #fff;
        }

        .box-content {
            margin-top: 10px;
            font-size: 18px;
            color: #333;
        }

        .custom-button {
            background-color: #ff8f33;
            color: #fff;
            padding: 10px 20px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            margin-top: 20px;
        }

        .custom-button:hover {
            background-color: #ff5722;
        }

        .dropdown-content {
            display: none;
            flex-direction: column;
            align-items: center;
        }

        .dropdown-item {
            margin: 10px 0;
            cursor: pointer;
        }

        /* 新增二级菜单样式 */
        .sub-dropdown-content {
            display: none;
            flex-direction: column;
            margin-top: 8px;
            padding-left: 15px;
            align-items: flex-start;
        }

        .sub-dropdown-item {
            margin: 6px 0;
            cursor: pointer;
            color: #333;
        }

        .has-submenu::after {
            content: " ▼";
            font-size: 14px;
            margin-left: 4px;
        }

        .has-submenu.active::after {
            content: " ▲";
        }
    </style>
</head>
<body>
    <div class="custom-box">
        <div class="box-title">Dropdown Menu</div>
        <div class="box-content">
            Sample Text
        </div>
        <button class="custom-button" id="dropdown-button">Click Me</button>
        <div class="dropdown-content" id="dropdown-menu">
            <!-- 修改后的带二级菜单的项 -->
            <div class="dropdown-item has-submenu">
                Dropdown Text
                <div class="sub-dropdown-content">
                    <div class="sub-dropdown-item">二级文本1</div>
                    <div class="sub-dropdown-item">二级文本2</div>
                    <div class="sub-dropdown-item">二级文本3</div>
                </div>
            </div>
            <div class="dropdown-item">Sample Text</div>
            <div class="dropdown-item">Sample Text</div>
        </div>
    </div>

    <script>
        const dropdownButton = document.getElementById('dropdown-button');
        const dropdownMenu = document.getElementById('dropdown-menu');

        dropdownButton.addEventListener('click', () => {
            dropdownMenu.style.display = dropdownMenu.style.display === 'none' ? 'flex' : 'none';
        });

        // 新增二级菜单处理逻辑
        const subMenuTriggers = document.querySelectorAll('.has-submenu');
        subMenuTriggers.forEach(trigger => {
            const subMenu = trigger.querySelector('.sub-dropdown-content');
            trigger.addEventListener('click', (e) => {
                e.stopPropagation();
                subMenu.style.display = subMenu.style.display === 'none' ? 'flex' : 'none';
                trigger.classList.toggle('active');
            });
        });
    </script>
</body>
</html>

内容的提问来源于stack exchange,提问作者s.ha11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:10:33