当前位置:首页 > JavaScript

js 实现tabs

2026-01-31 17:26:38JavaScript

使用纯 JavaScript 实现 Tabs

以下是实现基础 Tabs 功能的完整代码示例,包含 HTML 结构、CSS 样式和 JavaScript 交互逻辑。

HTML 结构

<div class="tabs">
  <div class="tabs-header">
    <button class="tab-btn active" data-tab="tab1">Tab 1</button>
    <button class="tab-btn" data-tab="tab2">Tab 2</button>
    <button class="tab-btn" data-tab="tab3">Tab 3</button>
  </div>

  <div class="tabs-content">
    <div class="tab-panel active" id="tab1">Content 1</div>
    <div class="tab-panel" id="tab2">Content 2</div>
    <div class="tab-panel" id="tab3">Content 3</div>
  </div>
</div>

CSS 样式

.tabs-header {
  display: flex;
  border-bottom: 1px solid #ddd;
}

.tab-btn {
  padding: 10px 20px;
  background: none;
  border: none;
  cursor: pointer;
}

.tab-btn.active {
  border-bottom: 2px solid #007bff;
}

.tab-panel {
  display: none;
  padding: 20px;
}

.tab-panel.active {
  display: block;
}

JavaScript 实现

document.addEventListener('DOMContentLoaded', function() {
  const tabButtons = document.querySelectorAll('.tab-btn');
  const tabPanels = document.querySelectorAll('.tab-panel');

  tabButtons.forEach(button => {
    button.addEventListener('click', () => {
      // 移除所有按钮和面板的active类
      tabButtons.forEach(btn => btn.classList.remove('active'));
      tabPanels.forEach(panel => panel.classList.remove('active'));

      // 为当前按钮和对应面板添加active类
      button.classList.add('active');
      const panelId = button.getAttribute('data-tab');
      document.getElementById(panelId).classList.add('active');
    });
  });
});

使用事件委托优化

对于动态添加的 tabs 或大量 tabs,可以使用事件委托提高性能:

document.addEventListener('DOMContentLoaded', function() {
  const tabsContainer = document.querySelector('.tabs-header');
  const tabPanels = document.querySelectorAll('.tab-panel');

  tabsContainer.addEventListener('click', (e) => {
    if (e.target.classList.contains('tab-btn')) {
      // 移除所有active类
      document.querySelectorAll('.tab-btn.active').forEach(btn => {
        btn.classList.remove('active');
      });
      tabPanels.forEach(panel => panel.classList.remove('active'));

      // 设置当前active
      e.target.classList.add('active');
      const panelId = e.target.getAttribute('data-tab');
      document.getElementById(panelId).classList.add('active');
    }
  });
});

添加过渡动画效果

可以通过 CSS 为 tabs 切换添加平滑的过渡效果:

.tab-panel {
  opacity: 0;
  height: 0;
  overflow: hidden;
  transition: opacity 0.3s ease, height 0.3s ease;
}

.tab-panel.active {
  opacity: 1;
  height: auto;
}

响应式 Tabs 实现

对于移动设备,可以将 tabs 转换为下拉菜单:

@media (max-width: 768px) {
  .tabs-header {
    flex-direction: column;
  }

  .tab-btn {
    text-align: left;
  }
}

可复用组件实现

创建一个可复用的 Tabs 类:

class Tabs {
  constructor(containerId) {
    this.container = document.getElementById(containerId);
    this.buttons = this.container.querySelectorAll('.tab-btn');
    this.panels = this.container.querySelectorAll('.tab-panel');

    this.init();
  }

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

  switchTab(button) {
    this.buttons.forEach(btn => btn.classList.remove('active'));
    this.panels.forEach(panel => panel.classList.remove('active'));

    button.classList.add('active');
    const panelId = button.getAttribute('data-tab');
    document.getElementById(panelId).classList.add('active');
  }
}

// 使用示例
new Tabs('tabs-container');

以上实现涵盖了从基础到进阶的 Tabs 功能,可以根据项目需求选择适合的实现方式。

js 实现tabs

标签: jstabs
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在H…