博客列表 >简单的下拉菜单实现

简单的下拉菜单实现

leverWang
leverWang原创
2020年06月15日 09:44:46665浏览

效果

文档结构

  1. <div class="nav">
  2. <ul>
  3. <li class="first"><a href="">菜单1</a></li>
  4. <li><a href="">菜单2</a></li>
  5. <li>
  6. <a href="">菜单3</a>
  7. <ul class="subMenu">
  8. <li><a href="">子菜单</a></li>
  9. <li><a href="">子菜单</a></li>
  10. <li><a href="">子菜单</a></li>
  11. <li><a href="">子菜单</a></li>
  12. <li><a href="">子菜单</a></li>
  13. <li><a href="">子菜单</a></li>
  14. </ul>
  15. </li>
  16. <li><a href="">菜单4</a></li>
  17. <li>
  18. <a href="">菜单5</a>
  19. <ul class="subMenu">
  20. <li><a href="">子菜单</a></li>
  21. <li><a href="">子菜单</a></li>
  22. <li><a href="">子菜单</a></li>
  23. <li><a href="">子菜单</a></li>
  24. <li><a href="">子菜单</a></li>
  25. <li><a href="">子菜单</a></li>
  26. <li><a href="">子菜单</a></li>
  27. <li><a href="">子菜单</a></li>
  28. </ul>
  29. </li>
  30. </ul>
  31. </div>

js代码

  1. <script>
  2. //获取导航菜单
  3. const navs = document.querySelectorAll(".nav>ul>li");
  4. //获取子菜单
  5. const subs = document.querySelectorAll(".subMenu");
  6. // 为导航菜单添加监听事件
  7. navs.forEach(function (li) {
  8. li.addEventListener("mouseover", showSubMenu);
  9. li.addEventListener("mouseout", closeSubMenu);
  10. });
  11. // 为子菜单添加监听事件,解决主导航切换到子菜单,子菜单消失问题
  12. subs.forEach(function (ul) {
  13. ul.addEventListener("mouseover", function (e) {
  14. this.style.display = "block";
  15. });
  16. ul.addEventListener("mouseout", function (e) {
  17. this.style.display = "none";
  18. });
  19. });
  20. function showSubMenu(e) {
  21. // 判断当前导航是否有子菜单
  22. if (e.target.nextElementSibling != null) {
  23. e.target.nextElementSibling.style.display = "block";
  24. }
  25. }
  26. function closeSubMenu(e) {
  27. // console.log(e.target);
  28. // 判断当前导航是否有子菜单并且当前触发事件的为菜单标签
  29. if (e.target.nextElementSibling != null && e.target.nodeName == "A") {
  30. e.target.nextElementSibling.style.display = "none";
  31. }
  32. }
  33. </script>

样式表

  1. <style>
  2. * {
  3. padding: 0;
  4. margin: 0;
  5. }
  6. a {
  7. text-decoration: none;
  8. }
  9. li {
  10. list-style: none;
  11. }
  12. .nav > ul > li {
  13. float: left;
  14. height: 60px;
  15. line-height: 60px;
  16. color: #fff;
  17. position: relative;
  18. }
  19. .nav > ul > li > a {
  20. color: #fff;
  21. padding: 0 30px;
  22. height: 56px;
  23. display: inline-block;
  24. }
  25. .nav > ul > li > a:hover {
  26. border-bottom: 4px solid rgb(13, 151, 0);
  27. }
  28. .subMenu {
  29. display: none;
  30. color: #333;
  31. position: absolute;
  32. width: 200px;
  33. border: 1px solid #ddd;
  34. text-align: center;
  35. top: 60px;
  36. left: -50px;
  37. background: #f4f4f4;
  38. }
  39. .subMenu li {
  40. float: left;
  41. }
  42. .subMenu a {
  43. float: left;
  44. padding: 0 20px;
  45. width: 60px;
  46. color: #333;
  47. }
  48. .subMenu a:hover {
  49. background: #ddd;
  50. }
  51. .nav {
  52. height: 60px;
  53. background: #000;
  54. width: 100%;
  55. padding-left: 150px;
  56. }
  57. .first {
  58. background: #333;
  59. }
  60. </style>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议