当前位置:首页 > JavaScript

tabs实现 js

2026-04-05 06:26:12JavaScript

使用 JavaScript 实现 Tabs 功能

方法 1:纯 JavaScript 实现

HTML 结构示例:

<div class="tabs">
  <div class="tab-header">
    <button class="tab-link active" data-tab="tab1">Tab 1</button>
    <button class="tab-link" data-tab="tab2">Tab 2</button>
    <button class="tab-link" data-tab="tab3">Tab 3</button>
  </div>
  <div class="tab-content">
    <div id="tab1" class="tab-pane active">Content 1</div>
    <div id="tab2" class="tab-pane">Content 2</div>
    <div id="tab3" class="tab-pane">Content 3</div>
  </div>
</div>

CSS 基础样式:

tabs实现 js

.tab-pane {
  display: none;
}
.tab-pane.active {
  display: block;
}
.tab-link.active {
  font-weight: bold;
}

JavaScript 实现:

document.addEventListener('DOMContentLoaded', function() {
  const tabLinks = document.querySelectorAll('.tab-link');

  tabLinks.forEach(link => {
    link.addEventListener('click', function() {
      const tabId = this.getAttribute('data-tab');

      // 移除所有active类
      document.querySelectorAll('.tab-link').forEach(el => el.classList.remove('active'));
      document.querySelectorAll('.tab-pane').forEach(el => el.classList.remove('active'));

      // 添加active类到当前tab
      this.classList.add('active');
      document.getElementById(tabId).classList.add('active');
    });
  });
});

方法 2:使用事件委托优化

优化后的 JavaScript:

tabs实现 js

document.addEventListener('DOMContentLoaded', function() {
  const tabsContainer = document.querySelector('.tabs');

  tabsContainer.addEventListener('click', function(e) {
    if (e.target.classList.contains('tab-link')) {
      const tabId = e.target.getAttribute('data-tab');

      // 更新active状态
      document.querySelectorAll('.tab-link').forEach(el => el.classList.remove('active'));
      document.querySelectorAll('.tab-pane').forEach(el => el.classList.remove('active'));

      e.target.classList.add('active');
      document.getElementById(tabId).classList.add('active');
    }
  });
});

方法 3:支持键盘导航

增强可访问性的实现:

document.addEventListener('DOMContentLoaded', function() {
  const tabs = document.querySelectorAll('.tab-link');

  tabs.forEach((tab, index) => {
    tab.addEventListener('keydown', function(e) {
      if (e.key === 'ArrowRight') {
        const nextTab = tabs[(index + 1) % tabs.length];
        nextTab.focus();
      } else if (e.key === 'ArrowLeft') {
        const prevTab = tabs[(index - 1 + tabs.length) % tabs.length];
        prevTab.focus();
      } else if (e.key === 'Home') {
        tabs[0].focus();
      } else if (e.key === 'End') {
        tabs[tabs.length - 1].focus();
      }
    });

    tab.addEventListener('click', function() {
      // 同方法1或2的实现
    });
  });
});

方法 4:使用 ES6 类封装

可复用的 Tab 组件:

class TabSystem {
  constructor(container) {
    this.container = container;
    this.tabLinks = this.container.querySelectorAll('.tab-link');
    this.tabPanes = this.container.querySelectorAll('.tab-pane');
    this.init();
  }

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

  switchTab(activeLink) {
    const tabId = activeLink.getAttribute('data-tab');

    this.tabLinks.forEach(link => link.classList.remove('active'));
    this.tabPanes.forEach(pane => pane.classList.remove('active'));

    activeLink.classList.add('active');
    this.container.querySelector(`#${tabId}`).classList.add('active');
  }
}

// 使用方式
document.addEventListener('DOMContentLoaded', () => {
  const tabContainers = document.querySelectorAll('.tabs');
  tabContainers.forEach(container => new TabSystem(container));
});

这些方法提供了从基础到进阶的 JavaScript Tab 实现方案,可以根据项目需求选择适合的解决方案。

标签: tabsjs
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…