我使用 CSS、HTML 和 jquery 建立了一個水平選單。當有人單擊選單項目時,它會顯示一個子選單。
我的問題是,當子選單已開啟並且我單擊另一個選單項目時,它會顯示新的子選單,但不會隱藏已開啟的上一個選單。
更新:我編輯了該問題,因此現在只關註一個問題。
$(".menus_li").click(function(e) { $(".blocks_ul", this).toggleClass('submenu-is-active'); });
a { color: #fff; text-decoration: none; } li { list-style: none; } .top-menu { z-index: 2; position: fixed; top: 0; left: 0; width: 100%; display: flex; width: 100%; background: #0088ff; padding: 1rem; margin: 0; } .menus_li { font-weight: bold; margin-left: 1rem; } .blocks_ul { display: none; position: absolute; background: #fff; top: 100%; min-width: 120px; border-radius: 8px; padding: 1rem; } .blocks_ul a { color: #000; } .blocks_ul li { padding-left: 10px; font-weight: normal; padding: 0.4rem 0.7rem; } .blocks_ul.submenu-is-active { display: block; } .bg_submenu { background-color: rgba(0, 0, 0, 0.6); position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; display: none; } .bg_submenu.show { display: block; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="bg_submenu"></div> <ul class="top-menu"> <li class="menus_li"><a href="#">Cars </a> <ul class="blocks_ul"> <li><a class="menu-link" href="#">Mercedes</a></li> <li><a class="menu-link" href="#">Jeep</a></li> <li><a class="menu-link" href="#">Ford</a></li> <li><a class="menu-link" href="#">BMW</a></li> <li><a class="menu-link" href="#">Tesla</a></li> </ul> </li> <li class="menus_li"><a href="#">Computers </a> <ul class="blocks_ul"> <li><a class="menu-link" href="#">Apple</a></li> <li><a class="menu-link" href="#">Lenovo</a></li> <li><a class="menu-link" href="#">HP</a></li> <li><a class="menu-link" href="#">Dell</a></li> <li><a class="menu-link" href="#">Acer</a></li> </ul> </li> </ul>
P粉6638838622024-03-21 07:56:08
您可以按以下方式更改程式碼(程式碼中的註解)
const $blocks = $(".blocks_ul"); // 取得所有區塊 const $background = $(".bg_submenu"); // 取得背景 $(".menus_li").on('點擊', e => { const $thisBlock = $(".blocks_ul", e.currentTarget); // 取得目前區塊 $blocks.not($thisBlock).removeClass('子選單處於作用中'); // 從其他區塊中刪除類別 $thisBlock.toggleClass('子選單處於活動狀態'); // 切換當前區塊上的類 $background.toggleClass('show', $thisBlock.hasClass('submenu-is-active')); // 僅當顯示區塊時才顯示背景 }); $('body').on('點選', e => { const $clicked = $(e.target); // 取得被點擊的目標 // 檢查點擊是否源自選單 if (!$clicked.hasClass('menus_li') && !$clicked.closest('.menus_li').length) { // 如果不執行下列操作 $blocks.removeClass('子選單處於活動狀態'); //隱藏選單 $background.removeClass('顯示'); // 隱藏背景 } })###A { 顏色:#fff; 文字裝飾:無; } 李{ 列表樣式:無; } 。頂部選單 { z 索引:2; 位置:固定; 頂部:0; 左:0; 寬度:100%; 顯示:柔性; 寬度:100%; 背景:#0088ff; 填充:1rem; 保證金:0; } .menus_li { 字體粗細:粗體; 左邊距:1rem; } .blocks_ul { 顯示:無; 位置:絕對; 背景:#fff; 頂部:100%; 最小寬度:120px; 邊框半徑:8px; 填充:1rem; } .blocks_ul a { 顏色:#000; } .blocks_ul li { 左內邊距:10px; 字體粗細:正常; 填充:0.4rem 0.7rem; } .blocks_ul.submenu-is-active { 顯示:塊; } .bg_子選單{ 背景顏色: rgba(0, 0, 0, 0.6); 位置:固定; 頂部:0; 左:0; 寬度:100%; 高度:100%; z 索引:1; 顯示:無; } .bg_submenu.show { 顯示:塊; }
ssccc
######汽車##