Jquery 导航栏 [tablet/mobile-view]

Jquery Navigation bar [tablet/mobile-view]

我是 jquery 的新手。当我在移动视图上打开和关闭导航栏时,slideToggle 流被后代 "ul" 弄乱了。当我关闭导航栏时,jquery 将后代 ul 显示更改为块 (display:block),这导致幻灯片流混乱。作为 jquery 的新手,我不知道如何解决这个问题。请帮助我提供任何参考或纠正我做错的地方。

    $(document).ready(function(){
     $('.my-mobile-menu').click(function(){
      $('.my-header-navmenu nav ul').slideToggle(250,'swing');
     });
    
     $('.my-pa-service').on('click',function(e){
      $('.my-ul-service').slideToggle('swing');
     });
    
    });
    body{
     box-sizing: border-box;
     padding: 0;
     margin: 0;
     width: 100%;
    }
    
    ul{
     margin: 0px;
     padding: 0px;
    }
    
    li{
     list-style-type: none;
    
    }
    
    a{
     text-decoration: none;
     margin: 0;
     padding: 0;
    }
    
    a:hover{
     text-decoration: none;
    }
    
    /* ///////////// color  codes //////////////*/
    .greyblack-bg{
     background:#343a40;
    }
    
    .white-bg{
     background:#ffffff;
    }
    
    /*////////////// header ////////////////*/
    
    .my-header-nav{
     padding: 0px;
     margin: 0px;
    }
    
    .my-header-nav nav ul{
     padding: 0px;
     margin: 0px;
    }
    
    .my-header-nav nav ul li{
     display: inline-block; 
    }
    
    .my-header-nav nav ul li a{
     display: block;
     font-size: 16px;
     padding: 35px 10px 35px 10px;
     font-family:"Rubik",sans-serif;
     text-transform: capitalize;
     font-weight: 400;
     color: #191d34;
     transition: 0.3s;
     text-decoration: none;
     position: relative;
    }
    
    .my-header-nav nav ul li .my-ul-service{
     display: none;
    }
    
    .my-mobile-menu{
     position: absolute;
     top: -8px;
     right: 25px;
    }
    
    .my-mobile-menu a{
     font-size: 35px;
     display: block;
     text-align: right;
     color: #021238;
    }
    
    /*/////// Responsive Menu //////*/
    
    @media screen and (min-width: 992px){
    
     .my-header-nav nav ul{
      display: block !important;
     }
    }
    
    @media (max-width: 991px) {
    
     .my-header-navmenu{
      padding: 10px 0;
         height: 60px;
     }
    
     .my-header-navmenu .my-header-nav{
      position: absolute;
      left: 50px;
      right: 50px;
      height: 100%;
      top: 45px;
     }
    
     .my-header-nav nav ul {
      background:#ffffff;
      opacity: 98%;
      display: none;
     }
    
     .my-header-nav nav ul li{
      display: block;
     }
    
     .my-header-nav nav ul li a{
      display: block;
      font-size: 14px;
      padding: 5px 10px;
      margin: 2px 5px;
      font-family:"Rubik",sans-serif;
      text-transform: capitalize;
      font-weight: 400;
      color: #191d34;
      text-decoration: none;
    
     }
    
     .my-header-nav nav ul li a.active-page{
      color:#ff5e13;
     }
    
     .my-header-nav nav ul li a:hover{
      color:#ff5e13;
      transition: 0.5s;
     }
    
     .my-header-nav nav ul li .my-ul-service{
      display: none;
         
     }
    
     .my-header-nav nav ul li .my-ul-service li{
      display: block;
     }
    
     .my-header-nav nav ul li .my-ul-service li a{
      display: block;
      font-size: 14px;
      padding: 5px 10px;
      margin: 2px 5px;
      font-family:"Rubik",sans-serif;
      text-transform: capitalize;
      font-weight: 400;
      color: #191d34;
      text-decoration: none;
     }
    
    }
    
    
    @media (max-width: 575px) {
    
     .my-header-navmenu .my-header-nav{
      position: absolute;
      left: 5px;
      right: 5px;
      height: 100%;
      top: 45px;
     }
    
    }
    
    .asdf{
     height: 300px;
     background-color:#ff5e13;
    }
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
     <!-- jQuery library -->
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
     <!-- Popper JS -->
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
     <!-- Latest compiled JavaScript -->
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
     <title>My First Bootstrap Website</title>
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <!-- CSS here -->
     <link rel="stylesheet" href="css/bootstrap.min.css">
     <link rel="stylesheet" href="css/style.css">
     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

      <div class="my-header-area">
       <div class="my-header-navmenu white-bg">
        <div class="container">
         <div class="row align-items-center">
          <div class="col-lg-12 col-xl-12">
           <div class="my-header-nav "><!--d-none d-lg-block-->
            <nav>
             <ul class="my-ul-nav">
              <li><a href="#" class="active-page">Home</a></li>
              <li><a href="#">About</a></li>
              <li class="my-pa-service"><a href="#">service</a>
               <ul class="my-ul-service">
                <li><a href="#">service1</a></li>
                <li><a href="#">service1</a></li>
                <li><a href="#">service3</a></li>
               </ul> 
              </li> 
              <li><a href="#">blog</a></li>
              <li><a href="#">Contact</a></li>
             </ul>
            </nav> 
           </div>
          </div>
          <div class="col-12">
           <div class="my-mobile-menu d-block d-lg-none"><a href="#"><i class="fa fa-bars" aria-hidden="true"></i></a></div>
          </div>
         </div>
        </div>
       </div>
      </div> 

      <div class="asdf">
       
      </div>
     <!-- JS here -->
     <script src="js/navigationbar.js"></script>
    
 

如果我理解的话,问题是 service 下拉菜单在您打开主下拉菜单时打开,而您不希望这样..好吧..这就是问题所在

$('.my-mobile-menu').click(function(){
            $('.my-header-navmenu nav ul').slideToggle(250,'swing');
        });

您是在告诉它在单击按钮时打开 nav ul。它将找到 nav 中的每个 ul 元素并打开它。

与其通过定位 html 标签打开它,不如尝试添加 类 并改为定位它们。

$('.my-mobile-menu').click(function(){
            $('.my-header-navmenu nav .my-ul-nav').slideToggle(250,'swing');
        });

或者您可以保留它,但像这样更改选择器

$('.my-mobile-menu').click(function(){
            $('.my-header-navmenu nav>ul').slideToggle(250,'swing');
        });

请注意,我添加了 >。它只会首先直接定位 child nav 个元素。

你是这个意思吗?

    $(document).ready(function(){
     $('.my-mobile-menu').click(function(){
      $('.my-header-navmenu nav ul').slideToggle(250,'swing'); //this shows all ul including the service nav
            $('.my-ul-service').hide(); //just hide it here
     });
    
     $('.my-pa-service').on('click',function(e){
      $('.my-ul-service').slideToggle('swing');
     });
    
    });
    body{
     box-sizing: border-box;
     padding: 0;
     margin: 0;
     width: 100%;
    }
    
    ul{
     margin: 0px;
     padding: 0px;
    }
    
    li{
     list-style-type: none;
    
    }
    
    a{
     text-decoration: none;
     margin: 0;
     padding: 0;
    }
    
    a:hover{
     text-decoration: none;
    }
    
    /* ///////////// color  codes //////////////*/
    .greyblack-bg{
     background:#343a40;
    }
    
    .white-bg{
     background:#ffffff;
    }
    
    /*////////////// header ////////////////*/
    
    .my-header-nav{
     padding: 0px;
     margin: 0px;
    }
    
    .my-header-nav nav ul{
     padding: 0px;
     margin: 0px;
    }
    
    .my-header-nav nav ul li{
     display: inline-block; 
    }
    
    .my-header-nav nav ul li a{
     display: block;
     font-size: 16px;
     padding: 35px 10px 35px 10px;
     font-family:"Rubik",sans-serif;
     text-transform: capitalize;
     font-weight: 400;
     color: #191d34;
     transition: 0.3s;
     text-decoration: none;
     position: relative;
    }
    
    .my-header-nav nav ul li .my-ul-service{
     display: none;
    }
    
    .my-mobile-menu{
     position: absolute;
     top: -8px;
     right: 25px;
    }
    
    .my-mobile-menu a{
     font-size: 35px;
     display: block;
     text-align: right;
     color: #021238;
    }
    
    /*/////// Responsive Menu //////*/
    
    @media screen and (min-width: 992px){
    
     .my-header-nav nav ul{
      display: block !important;
     }
    }
    
    @media (max-width: 991px) {
    
     .my-header-navmenu{
      padding: 10px 0;
         height: 60px;
     }
    
     .my-header-navmenu .my-header-nav{
      position: absolute;
      left: 50px;
      right: 50px;
      height: 100%;
      top: 45px;
     }
    
     .my-header-nav nav ul {
      background:#ffffff;
      opacity: 98%;
      display: none;
     }
    
     .my-header-nav nav ul li{
      display: block;
     }
    
     .my-header-nav nav ul li a{
      display: block;
      font-size: 14px;
      padding: 5px 10px;
      margin: 2px 5px;
      font-family:"Rubik",sans-serif;
      text-transform: capitalize;
      font-weight: 400;
      color: #191d34;
      text-decoration: none;
    
     }
    
     .my-header-nav nav ul li a.active-page{
      color:#ff5e13;
     }
    
     .my-header-nav nav ul li a:hover{
      color:#ff5e13;
      transition: 0.5s;
     }
    
     .my-header-nav nav ul li .my-ul-service{
      display: none;
         
     }
    
     .my-header-nav nav ul li .my-ul-service li{
      display: block;
     }
    
     .my-header-nav nav ul li .my-ul-service li a{
      display: block;
      font-size: 14px;
      padding: 5px 10px;
      margin: 2px 5px;
      font-family:"Rubik",sans-serif;
      text-transform: capitalize;
      font-weight: 400;
      color: #191d34;
      text-decoration: none;
     }
    
    }
    
    
    @media (max-width: 575px) {
    
     .my-header-navmenu .my-header-nav{
      position: absolute;
      left: 5px;
      right: 5px;
      height: 100%;
      top: 45px;
     }
    
    }
    
    .asdf{
     height: 300px;
     background-color:#ff5e13;
    }
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
     <!-- jQuery library -->
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
     <!-- Popper JS -->
     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
     <!-- Latest compiled JavaScript -->
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
     <title>My First Bootstrap Website</title>
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <!-- CSS here -->
     <link rel="stylesheet" href="css/bootstrap.min.css">
     <link rel="stylesheet" href="css/style.css">
     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

      <div class="my-header-area">
       <div class="my-header-navmenu white-bg">
        <div class="container">
         <div class="row align-items-center">
          <div class="col-lg-12 col-xl-12">
           <div class="my-header-nav "><!--d-none d-lg-block-->
            <nav>
             <ul class="my-ul-nav">
              <li><a href="#" class="active-page">Home</a></li>
              <li><a href="#">About</a></li>
              <li class="my-pa-service"><a href="#">service</a>
               <ul class="my-ul-service">
                <li><a href="#">service1</a></li>
                <li><a href="#">service1</a></li>
                <li><a href="#">service3</a></li>
               </ul> 
              </li> 
              <li><a href="#">blog</a></li>
              <li><a href="#">Contact</a></li>
             </ul>
            </nav> 
           </div>
          </div>
          <div class="col-12">
           <div class="my-mobile-menu d-block d-lg-none"><a href="#"><i class="fa fa-bars" aria-hidden="true"></i></a></div>
          </div>
         </div>
        </div>
       </div>
      </div> 

      <div class="asdf">
       
      </div>
     <!-- JS here -->
     <script src="js/navigationbar.js"></script>