博客列表 >JS编程源码:拿来即用!经典选项卡案例,两步实现逻辑简洁~

JS编程源码:拿来即用!经典选项卡案例,两步实现逻辑简洁~

张福根一修品牌运营
张福根一修品牌运营原创
2020年11月07日 17:52:29643浏览

经典选项卡案例

效果展示:

经典选项卡

案例源码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>作业: 经典选项卡案例</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. box-sizing: border-box;
  12. }
  13. a {
  14. text-decoration: none;
  15. color: #555;
  16. }
  17. a:hover {
  18. text-decoration: underline;
  19. color: red;
  20. }
  21. li {
  22. list-style: none;
  23. }
  24. li:hover {
  25. cursor: default;
  26. }
  27. .tabs {
  28. width: 600px;
  29. height: 300px;
  30. margin: 30px;
  31. background-color: lightgreen;
  32. display: flex;
  33. flex-direction: column;
  34. }
  35. .tab {
  36. height: 36px;
  37. display: flex;
  38. }
  39. .tab li {
  40. flex: auto;
  41. text-align: center;
  42. line-height: 36px;
  43. background-color: #fff;
  44. }
  45. .tab li.active {
  46. background-color: lightgreen;
  47. }
  48. .tab li:hover {
  49. cursor: pointer;
  50. }
  51. /* 默认所有选项卡只有一个显示,其它隐藏 */
  52. .item {
  53. padding: 20px;
  54. display: none;
  55. }
  56. .item.active {
  57. display: block;
  58. }
  59. </style>
  60. </head>
  61. <body>
  62. <div class="tabs">
  63. <!-- 导航 -->
  64. <ul class="tab">
  65. <li class="active" data-index="1">水果</li>
  66. <li data-index="2">手机</li>
  67. <li data-index="3">汽车</li>
  68. </ul>
  69. <!-- 详情1 -->
  70. <ul class="item active" data-index="1">
  71. <li><a href="">西瓜</a></li>
  72. <li><a href="">苹果</a></li>
  73. <li><a href="">香蕉</a></li>
  74. </ul>
  75. <!-- 详情2 -->
  76. <ul class="item" data-index="2">
  77. <li><a href="">华为</a></li>
  78. <li><a href="">小米</a></li>
  79. <li><a href="">OPPO</a></li>
  80. </ul>
  81. <!-- 详情2 -->
  82. <ul class="item" data-index="3">
  83. <li><a href="">吉利</a></li>
  84. <li><a href="">奇瑞</a></li>
  85. <li><a href="">长城</a></li>
  86. </ul>
  87. </div>
  88. <script>
  89. // 使用事件代理
  90. const tab = document.querySelector(".tab");
  91. // 下面内容区列表
  92. const items = document.querySelectorAll(".item");
  93. // 给导航绑定点击事件
  94. tab.addEventListener("click", show, false);
  95. // tab.addEventListener("mouseover", show, false);
  96. // 事件回调
  97. function show(ev) {
  98. // 第一步:
  99. // 1. 清空导航之前的所有样式, 并将用户当前的选择项激活
  100. // 1.1 清空导航原有的样式
  101. Array.from(tab.children).forEach((item) =>
  102. item.classList.remove("active")
  103. );
  104. // 1.2 将用户当前的选择项激活
  105. ev.target.classList.toggle("active");
  106. // 第二步:
  107. // 2. 清空内容区已显示的内容,并根据导航对应的索引项(data-index)来确定将哪个内容区激活
  108. // 2.1 清空列表的原生的内容
  109. items.forEach((item) => item.classList.remove("active"));
  110. // 2.2 根据导航对应的索引项(data-index)来确定将哪个内容区激活
  111. items.forEach((item) =>
  112. item.dataset.index === ev.target.dataset.index
  113. ? item.classList.toggle("active")
  114. : null
  115. );
  116. }
  117. </script>
  118. </body>
  119. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议