当前位置:首页 > 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 类:

js 实现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
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promise…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…