原生JS制作简易Tabs组件

深碍√TFBOYSˉ_ 2022-02-25 01:30 251阅读 0赞
  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. <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  7. <title>Document</title>
  8. <script src="./TabsController.js"></script>
  9. <style> ul, li { list-style: none; margin: 0; padding: 0; } .tab .tab-bar { display: flex; border-bottom: 1px solid blue; } .tab .tab-bar li { margin: 3px 20px 0 0; width: 30px; text-align: center; } .tab .tab-bar li.active { border: 1px solid blue; border-bottom: none; } .tab .tab-content li { display: none; } .tab .tab-content li.active { display: block; } </style>
  10. </head>
  11. <body>
  12. <div class="tab">
  13. <ul class="tab-bar">
  14. <li>
  15. 1
  16. </li>
  17. <li>
  18. 2
  19. </li>
  20. <li>
  21. 3
  22. </li>
  23. </ul>
  24. <ul class="tab-content">
  25. <li>content1</li>
  26. <li>content2</li>
  27. <li>content3</li>
  28. </ul>
  29. </div>
  30. </body>
  31. <script> new TabsController(document.querySelector(".tab")); </script>
  32. </html>
  33. /** *自己封装的一个基础的Tabs组件 *使用时只需要在页面引入js然后将html中div.tab复制,使用new TabsController(element)即可 */
  34. class TabsController {
  35. constructor(element) {
  36. this.nav = element.querySelector(".tab-bar").children;
  37. this.content = element.querySelector(".tab-content").children;
  38. this.active = 1; //当前激活的标签
  39. this.init(); //初始化
  40. this.bindEvents(); //绑定事件
  41. }
  42. init() {
  43. this.nav[0].classList.add("active");
  44. this.content[0].classList.add("active");
  45. }
  46. bindEvents() {
  47. //封装foreach方法用来遍历节点
  48. const forEach = (context, fn) => Array.prototype.forEach.call(context, fn);
  49. //封装indexOf方法用来判断当前节点在父节点的中的次序
  50. const indexOf = (context, item) =>
  51. Array.prototype.indexOf.call(context, item);
  52. forEach(this.nav, i => {
  53. i.addEventListener("click", e => {
  54. forEach(this.nav, i => i.classList.remove("active"));
  55. forEach(this.content, i => i.classList.remove("active"));
  56. this.active = indexOf(this.nav, e.target);
  57. this.nav[this.active].classList.add("active");
  58. this.content[this.active].classList.add("active");
  59. });
  60. });
  61. }
  62. }

发表评论

表情:
评论列表 (有 0 条评论,251人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JavaScript(JS)网页--tab制作

    JS网页–tab栏制作 在网页的制作中,通常会使用到tab栏,例如淘宝,商品详情,规格参数和累计评价三个栏,点击不同的栏下面出现的内容不同。在这样的设计中,JS可以做到。