繁体   English   中英

如何使用onclick函数打开子菜单并使用onclick函数隐藏

[英]How To open Sub Menu with onclick Function and hide with onclick Function

我做了一个侧边栏导航,所以在鼠标悬停打开子菜单时就打开了,但我希望在单击时打开它,在同一选项卡上单击它来隐藏它。 请检查我在此Codepen中的代码谢谢。

<nav class="navigation">
  <ul class="mainmenu">
    <li><a href="">Home</a></li>
    <li><a href="">About</a></li>
    <li><a href="">Products</a>
      <ul class="submenu">
        <li><a href="">Tops</a></li>
        <li><a href="">Bottoms</a></li>
        <li><a href="">Footwear</a></li>
      </ul>
    </li>
      <li><a href="">Contact us</a></li>
  </ul>
</nav>

https://codepen.io/anon/pen/erNpYG

提前致谢。

您可以将隐藏的复选框与常规的同级组合器( ~ )结合使用,以在没有javascript的情况下单击以关闭并打开子菜单:

 html, body { font-family: Arial, Helvetica, sans-serif; } .navigation { width: 300px; } .mainmenu, .submenu { list-style: none; padding: 0; margin: 0; } .mainmenu a, .mainmenu label { display: block; background-color: #CCC; text-decoration: none; padding: 10px; color: #000; } .mainmenu a:hover, .mainmenu label:hover { background-color: #C5C5C5; } /* hide the input */ .mainmenu input { display: none; } /* if a sibling checkbox is check show the menu */ .mainmenu input:checked ~ .submenu { display: block; max-height: 200px; } .submenu a, .submenu label { background-color: #999; } .submenu a:hover { background-color: #666; } .submenu { overflow: hidden; max-height: 0; transition: all 0.5s ease-out; } 
 <nav class="navigation"> <ul class="mainmenu"> <li><a href="">Home</a></li> <li><a href="">About</a></li> <li><input type="checkbox" id="products"> <label for="products">Products</label> <ul class="submenu"> <li><a href="">Tops</a></li> <li><a href="">Bottoms</a></li> <li><a href="">Footwear</a></li> </ul> </li> <li><a href="">Contact us</a></li> </ul> </nav> 

我希望这能够帮到你。 我添加了一些jQuery。 ID用于目标子菜单。 您也可以为其他人重复。 只需更改ID。 我也为about标签创建了一个示例。 在单击另一个选项卡后,另一个选项卡菜单将关闭。

 $('.dropdown').click(function () { var target_id = $(this).attr('data-toggle'); $('.dropdown-list').not(target_id).slideUp(); $(target_id).slideToggle(); $('.dropdown-list').not(target_id).parents('li, .icon-tab').removeClass('active'); $('.dropdown').not(this).parents(' .icon-tab').removeClass('active'); $(this).parents('li, .icon-tab').toggleClass('active'); }); 
 html, body { font-family: Arial, Helvetica, sans-serif; } /* define a fixed width for the entire menu */ .navigation { width: 300px; } /* reset our lists to remove bullet points and padding */ .mainmenu, .submenu { list-style: none; padding: 0; margin: 0; } /* make ALL links (main and submenu) have padding and background color */ .mainmenu a { display: block; background-color: #CCC; text-decoration: none; padding: 10px; color: #000; } /* add hover behaviour */ .mainmenu a:hover { background-color: #C5C5C5; } /* when hovering over a .mainmenu item, display the submenu inside it. we're changing the submenu's max-height from 0 to 200px; */ /* we now overwrite the background-color for .submenu links only. CSS reads down the page, so code at the bottom will overwrite the code at the top. */ .submenu a { background-color: #999; } /* hover behaviour for links inside .submenu */ .submenu a:hover { background-color: #666; } /* this is the initial state of all submenus. we set it to max-height: 0, and hide the overflowed content. */ .submenu { display:none;} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <nav class="navigation"> <ul class="mainmenu"> <li><a href="">Home</a></li> <li><a class="dropdown" data-toggle="#about">About</a> <ul class="submenu dropdown-list" id="about"> <li><a href="">Tops</a></li> <li><a href="">Bottoms</a></li> <li><a href="">Footwear</a></li> </ul> </li> <li><a class="dropdown" data-toggle="#products">Products</a> <ul class="submenu dropdown-list" id="products"> <li><a href="">Tops</a></li> <li><a href="">Bottoms</a></li> <li><a href="">Footwear</a></li> </ul> </li> <li><a href="">Contact us</a></li> </ul> </nav> 

尝试使用js

 $(document).ready(function(){ $('.dropdown').each(function() { var $dropdown = $(this); $(".dropdown-link", $dropdown).click(function(e) { e.preventDefault(); $div = $(".submenu", $dropdown); $div.toggle(); $(".submenu").not($div).hide(); return false; }); }); $('html').click(function(){ $(".submenu").hide(); }); }); 
 html, body { font-family: Arial, Helvetica, sans-serif; } /* define a fixed width for the entire menu */ .navigation { width: 300px; } /* reset our lists to remove bullet points and padding */ .mainmenu, .submenu { list-style: none; padding: 0; margin: 0; } /* make ALL links (main and submenu) have padding and background color */ .mainmenu a { display: block; background-color: #CCC; text-decoration: none; padding: 10px; color: #000; } /* add hover behaviour */ .mainmenu a:hover { background-color: #C5C5C5; } /* when hovering over a .mainmenu item, display the submenu inside it. we're changing the submenu's max-height from 0 to 200px; */ /* we now overwrite the background-color for .submenu links only. CSS reads down the page, so code at the bottom will overwrite the code at the top. */ .submenu a { background-color: #999; } /* hover behaviour for links inside .submenu */ .submenu a:hover { background-color: #666; } /* this is the initial state of all submenus. we set it to max-height: 0, and hide the overflowed content. */ .submenu { overflow: hidden; display: none; -webkit-transition: all 0.5s ease-out; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <nav class="navigation"> <ul class="mainmenu"> <li><a href="">Home</a></li> <li class="dropdown"> <a href="#" class="dropdown-link">About</a> <ul class="submenu"> <li><a href="">Tops</a></li> <li><a href="">Bottoms</a></li> <li><a href="">Footwear</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-link">Products</a> <ul class="submenu"> <li><a href="">Tops</a></li> <li><a href="">Bottoms</a></li> <li><a href="">Footwear</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-link">Other dropdown</a> <ul class="submenu"> <li><a href="">Tops</a></li> <li><a href="">Bottoms</a></li> <li><a href="">Footwear</a></li> </ul> </li> <li><a href="">Contact us</a></li> </ul> </nav> 

这是使用纯JS

的CSS

.subrollin{
  overflow: hidden;
  max-height: 0;
  -webkit-transition: all 0.5s ease-in;
}
.subrollout{
  overflow: block;
  max-height: 200px;
  -webkit-transition: all 0.5s ease-out;
}

JS

var element = document.getElementsByClassName('parentmenu')[0];
element.addEventListener("click", function(e) {
var sub = document.getElementsByClassName('submenu')[0];
  if(sub.classList.contains('subrollout')){
      sub.classList.add("subrollin");    
      sub.classList.remove("subrollout");
  } else {
      sub.classList.add("subrollout");
      sub.classList.remove("subrollin");
  }
}, false);

看到这个codepen: https ://codepen.io/anon/pen/gzpaer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM