当前位置:首页 > 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,可以使用事件委托提高性能:

js 实现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 切换添加平滑的过渡效果:

js 实现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 功能,可以根据项目需求选择适合的实现方式。

标签: jstabs
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js如何实现继承

js如何实现继承

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

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…