使用 jquery 顯示/隱藏(切換)導覽選單的子選單無法如預期般運作
P粉183077097
P粉183077097 2024-03-20 09:28:35
0
1
527

我使用 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粉183077097
P粉183077097

全部回覆(1)
P粉663883862

您可以按以下方式更改程式碼(程式碼中的註解)

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

######汽車##
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板