…">
当前位置:首页 > JavaScript

js实现tab选项卡

2026-04-04 08:09:33JavaScript

js实现tab选项卡

JavaScript 实现 Tab 选项卡

HTML 结构

<div class="tab-container">
  <div class="tab-buttons">
    <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-contents">
    <div class="tab-content active" id="tab1">Content 1</div>
    <div class="tab-content" id="tab2">Content 2</div>
    <div class="tab-content" id="tab3">Content 3</div>
  </div>
</div>

CSS 样式

.tab-container {
  width: 100%;
  max-width: 600px;
  margin: 0 auto;
}
.tab-buttons {
  display: flex;
  gap: 5px;
}
.tab-btn {
  padding: 10px 20px;
  background: #f0f0f0;
  border: none;
  cursor: pointer;
}
.tab-btn.active {
  background: #ddd;
}
.tab-content {
  display: none;
  padding: 20px;
  border: 1px solid #ddd;
}
.tab-content.active {
  display: block;
}

JavaScript 实现

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

  tabButtons.forEach(button => {
    button.addEventListener('click', () => {
      const tabId = button.getAttribute('data-tab');

      // 移除所有按钮和内容的 active 类
      tabButtons.forEach(btn => btn.classList.remove('active'));
      tabContents.forEach(content => content.classList.remove('active'));

      // 添加 active 类到当前按钮和内容
      button.classList.add('active');
      document.getElementById(tabId).classList.add('active');
    });
  });
});

实现说明

  • HTML 结构中 data-tab 属性用于关联按钮和内容
  • CSS 中通过 .active 类控制显示/隐藏状态
  • JavaScript 通过事件委托实现切换逻辑
  • 默认显示第一个选项卡内容

扩展功能

// 添加新选项卡
function addNewTab(tabName, content) {
  const tabButtons = document.querySelector('.tab-buttons');
  const tabContents = document.querySelector('.tab-contents');

  const newBtn = document.createElement('button');
  newBtn.className = 'tab-btn';
  newBtn.textContent = tabName;
  newBtn.setAttribute('data-tab', `tab${Date.now()}`);

  const newContent = document.createElement('div');
  newContent.className = 'tab-content';
  newContent.id = newBtn.getAttribute('data-tab');
  newContent.textContent = content;

  tabButtons.appendChild(newBtn);
  tabContents.appendChild(newContent);

  // 为新按钮添加事件监听
  newBtn.addEventListener('click', function() {
    const tabId = this.getAttribute('data-tab');
    document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
    document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active'));
    this.classList.add('active');
    document.getElementById(tabId).classList.add('active');
  });
}

// 示例:添加新选项卡
addNewTab('New Tab', 'This is new tab content');

注意事项

  • 确保 HTML 结构中 data-tab 值与对应内容 id 匹配
  • 初始状态应有一个选项卡处于激活状态
  • 移动端适配可调整 CSS 中的按钮布局
  • 动态添加选项卡时需重新绑定事件

以上实现提供了基础 Tab 功能,可根据需求扩展动画效果、Ajax 加载内容等高级功能。

标签: 选项卡js
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

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

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 实现链表

js 实现链表

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

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…