当前位置:首页 > JavaScript

js 实现tab实现切换效果

2026-04-07 06:23:34JavaScript

js 实现tab实现切换效果

使用HTML和CSS构建基础结构

<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-content">
    <div class="tab-pane active" id="tab1">Content 1</div>
    <div class="tab-pane" id="tab2">Content 2</div>
    <div class="tab-pane" id="tab3">Content 3</div>
  </div>
</div>
.tab-btn {
  padding: 10px 20px;
  background: #eee;
  border: none;
  cursor: pointer;
}
.tab-btn.active {
  background: #ddd;
}
.tab-pane {
  display: none;
  padding: 20px;
  border: 1px solid #ddd;
}
.tab-pane.active {
  display: block;
}

通过事件委托实现切换逻辑

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

    // 移除所有按钮和内容面板的active类
    document.querySelectorAll('.tab-btn').forEach(btn => {
      btn.classList.remove('active');
    });
    document.querySelectorAll('.tab-pane').forEach(pane => {
      pane.classList.remove('active');
    });

    // 为当前点击的按钮和对应内容面板添加active类
    e.target.classList.add('active');
    document.getElementById(tabId).classList.add('active');
  }
});

使用classList API优化性能

const tabButtons = document.querySelector('.tab-buttons');
const tabs = document.querySelectorAll('.tab-btn');
const panes = document.querySelectorAll('.tab-pane');

tabButtons.addEventListener('click', (e) => {
  const targetBtn = e.target.closest('.tab-btn');
  if (!targetBtn) return;

  tabs.forEach(tab => tab.classList.toggle('active', tab === targetBtn));
  panes.forEach(pane => {
    pane.classList.toggle('active', pane.id === targetBtn.dataset.tab);
  });
});

添加过渡动画效果

.tab-pane {
  opacity: 0;
  height: 0;
  overflow: hidden;
  transition: opacity 0.3s, height 0.3s;
}
.tab-pane.active {
  opacity: 1;
  height: auto;
}

支持键盘导航

tabButtons.addEventListener('keydown', (e) => {
  if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {
    const currentTab = document.querySelector('.tab-btn.active');
    const tabsArray = Array.from(tabs);
    let index = tabsArray.indexOf(currentTab);

    if (e.key === 'ArrowLeft') index = (index - 1 + tabs.length) % tabs.length;
    if (e.key === 'ArrowRight') index = (index + 1) % tabs.length;

    tabsArray[index].click();
    tabsArray[index].focus();
  }
});

标签: 效果js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

vue实现气泡效果

vue实现气泡效果

实现气泡效果的方法 在Vue中实现气泡效果可以通过CSS动画、第三方库或自定义组件完成。以下是几种常见方法: 使用纯CSS动画 通过CSS的@keyframes和transform属性创建气泡上升动…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

h5实现左右滚动效果

h5实现左右滚动效果

使用CSS实现横向滚动 在HTML5中实现左右滚动效果,可以通过CSS的overflow-x属性配合white-space或flex布局实现。以下是一个基础示例: <div class="sc…