当前位置:首页 > JavaScript

tabs实现 js

2026-04-05 06:26:12JavaScript

使用 JavaScript 实现 Tabs 功能

方法 1:纯 JavaScript 实现

HTML 结构示例:

<div class="tabs">
  <div class="tab-header">
    <button class="tab-link active" data-tab="tab1">Tab 1</button>
    <button class="tab-link" data-tab="tab2">Tab 2</button>
    <button class="tab-link" data-tab="tab3">Tab 3</button>
  </div>
  <div class="tab-content">
    <div id="tab1" class="tab-pane active">Content 1</div>
    <div id="tab2" class="tab-pane">Content 2</div>
    <div id="tab3" class="tab-pane">Content 3</div>
  </div>
</div>

CSS 基础样式:

.tab-pane {
  display: none;
}
.tab-pane.active {
  display: block;
}
.tab-link.active {
  font-weight: bold;
}

JavaScript 实现:

document.addEventListener('DOMContentLoaded', function() {
  const tabLinks = document.querySelectorAll('.tab-link');

  tabLinks.forEach(link => {
    link.addEventListener('click', function() {
      const tabId = this.getAttribute('data-tab');

      // 移除所有active类
      document.querySelectorAll('.tab-link').forEach(el => el.classList.remove('active'));
      document.querySelectorAll('.tab-pane').forEach(el => el.classList.remove('active'));

      // 添加active类到当前tab
      this.classList.add('active');
      document.getElementById(tabId).classList.add('active');
    });
  });
});

方法 2:使用事件委托优化

优化后的 JavaScript:

document.addEventListener('DOMContentLoaded', function() {
  const tabsContainer = document.querySelector('.tabs');

  tabsContainer.addEventListener('click', function(e) {
    if (e.target.classList.contains('tab-link')) {
      const tabId = e.target.getAttribute('data-tab');

      // 更新active状态
      document.querySelectorAll('.tab-link').forEach(el => el.classList.remove('active'));
      document.querySelectorAll('.tab-pane').forEach(el => el.classList.remove('active'));

      e.target.classList.add('active');
      document.getElementById(tabId).classList.add('active');
    }
  });
});

方法 3:支持键盘导航

增强可访问性的实现:

document.addEventListener('DOMContentLoaded', function() {
  const tabs = document.querySelectorAll('.tab-link');

  tabs.forEach((tab, index) => {
    tab.addEventListener('keydown', function(e) {
      if (e.key === 'ArrowRight') {
        const nextTab = tabs[(index + 1) % tabs.length];
        nextTab.focus();
      } else if (e.key === 'ArrowLeft') {
        const prevTab = tabs[(index - 1 + tabs.length) % tabs.length];
        prevTab.focus();
      } else if (e.key === 'Home') {
        tabs[0].focus();
      } else if (e.key === 'End') {
        tabs[tabs.length - 1].focus();
      }
    });

    tab.addEventListener('click', function() {
      // 同方法1或2的实现
    });
  });
});

方法 4:使用 ES6 类封装

可复用的 Tab 组件:

tabs实现 js

class TabSystem {
  constructor(container) {
    this.container = container;
    this.tabLinks = this.container.querySelectorAll('.tab-link');
    this.tabPanes = this.container.querySelectorAll('.tab-pane');
    this.init();
  }

  init() {
    this.tabLinks.forEach(link => {
      link.addEventListener('click', () => this.switchTab(link));
    });
  }

  switchTab(activeLink) {
    const tabId = activeLink.getAttribute('data-tab');

    this.tabLinks.forEach(link => link.classList.remove('active'));
    this.tabPanes.forEach(pane => pane.classList.remove('active'));

    activeLink.classList.add('active');
    this.container.querySelector(`#${tabId}`).classList.add('active');
  }
}

// 使用方式
document.addEventListener('DOMContentLoaded', () => {
  const tabContainers = document.querySelectorAll('.tabs');
  tabContainers.forEach(container => new TabSystem(container));
});

这些方法提供了从基础到进阶的 JavaScript Tab 实现方案,可以根据项目需求选择适合的解决方案。

标签: tabsjs
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…