当前位置:首页 > JavaScript

js 实现tabs

2026-03-02 08:34:59JavaScript

JavaScript 实现 Tabs 功能

实现 Tabs(标签页)功能可以通过纯 JavaScript 完成,以下是核心实现步骤:

js 实现tabs

HTML 结构

<div class="tabs">
  <div class="tab-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="tab-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 样式

.tab-btn {
  padding: 10px 20px;
  background: #eee;
  border: none;
  cursor: pointer;
}
.tab-btn.active {
  background: #ddd;
}
.tab-panel {
  display: none;
  padding: 20px;
  border: 1px solid #ddd;
}
.tab-panel.active {
  display: block;
}

JavaScript 逻辑

document.querySelectorAll('.tab-btn').forEach(btn => {
  btn.addEventListener('click', () => {
    // 移除所有按钮和面板的active类
    document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));
    document.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active'));

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

增强版实现(支持动态添加)

如果需要支持动态添加标签页,可以使用事件委托:

js 实现tabs

document.querySelector('.tab-header').addEventListener('click', (e) => {
  if (e.target.classList.contains('tab-btn')) {
    const tabId = e.target.getAttribute('data-tab');

    // 更新按钮状态
    document.querySelectorAll('.tab-btn').forEach(b => 
      b.classList.toggle('active', b === e.target)
    );

    // 更新内容面板
    document.querySelectorAll('.tab-panel').forEach(p => 
      p.classList.toggle('active', p.id === tabId)
    );
  }
});

注意事项

  • 确保 data-tab 属性值与对应面板的 id 完全匹配
  • 初始状态通过 active 类控制默认显示的标签页
  • 可以通过 CSS 过渡效果增强切换动画
  • 移动端适配可能需要调整点击区域大小

框架实现示例(Vue)

如果使用现代前端框架,实现会更简洁:

<!-- Vue 示例 -->
<div class="tabs">
  <div class="tab-header">
    <button 
      v-for="(tab, index) in tabs" 
      :key="index"
      @click="activeTab = index"
      :class="{ active: activeTab === index }"
    >
      {{ tab.title }}
    </button>
  </div>
  <div class="tab-content">
    <div 
      v-for="(tab, index) in tabs"
      :key="index"
      class="tab-panel"
      :class="{ active: activeTab === index }"
    >
      {{ tab.content }}
    </div>
  </div>
</div>
new Vue({
  data: {
    activeTab: 0,
    tabs: [
      { title: 'Tab 1', content: 'Content 1' },
      { title: 'Tab 2', content: 'Content 2' },
      { title: 'Tab 3', content: 'Content 3' }
    ]
  }
});

标签: jstabs
分享给朋友:

相关文章

vue 实现tabs

vue 实现tabs

Vue 实现 Tabs 组件 在 Vue 中实现 Tabs 组件可以通过多种方式完成,以下是几种常见的方法: 使用动态组件和 v-for 循环 通过动态组件和 v-for 循环可以轻松实现 Tabs…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js jquery

js jquery

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

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…