当前位置:首页 > JavaScript

js 实现tab实现切换效果

2026-02-02 12:51:30JavaScript

使用HTML和CSS创建基本结构

创建一个包含多个标签页和对应内容的HTML结构,CSS用于控制标签页的样式和默认隐藏内容区域。

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

使用JavaScript实现切换逻辑

通过事件监听切换标签页,动态更新active类以显示对应内容。

js 实现tab实现切换效果

document.querySelectorAll('.tab-btn').forEach(btn => {
  btn.addEventListener('click', () => {
    // 移除所有按钮和内容的active类
    document.querySelectorAll('.tab-btn, .tab-pane').forEach(el => {
      el.classList.remove('active');
    });
    // 为当前按钮添加active类
    btn.classList.add('active');
    // 显示对应内容
    const tabId = btn.getAttribute('data-tab');
    document.getElementById(tabId).classList.add('active');
  });
});

使用事件委托优化性能

若标签页动态生成,可通过事件委托减少监听器数量。

js 实现tab实现切换效果

document.querySelector('.tab-header').addEventListener('click', (e) => {
  if (e.target.classList.contains('tab-btn')) {
    document.querySelectorAll('.tab-btn, .tab-pane').forEach(el => {
      el.classList.remove('active');
    });
    e.target.classList.add('active');
    const tabId = e.target.getAttribute('data-tab');
    document.getElementById(tabId).classList.add('active');
  }
});

扩展功能:动画效果

通过CSS过渡或JavaScript为内容切换添加淡入淡出效果。

.tab-pane {
  opacity: 0;
  transition: opacity 0.3s ease;
}
.tab-pane.active {
  opacity: 1;
}

动态加载内容

通过fetch实现点击标签页时异步加载内容。

document.querySelectorAll('.tab-btn').forEach(btn => {
  btn.addEventListener('click', () => {
    const tabId = btn.getAttribute('data-tab');
    fetch(`/api/content/${tabId}`)
      .then(response => response.text())
      .then(data => {
        document.getElementById(tabId).innerHTML = data;
        // 切换active类
        document.querySelectorAll('.tab-btn, .tab-pane').forEach(el => {
          el.classList.remove('active');
        });
        btn.classList.add('active');
        document.getElementById(tabId).classList.add('active');
      });
  });
});

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

相关文章

vue实现突出效果

vue实现突出效果

Vue 实现突出效果的方法 在 Vue 中实现突出效果可以通过多种方式,包括动态样式绑定、过渡动画、第三方库等。以下是几种常见的方法: 动态样式绑定 通过 v-bind:class 或 v-bind…

js实现vue路由

js实现vue路由

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

css3结合js制作

css3结合js制作

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

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

vue实现突出效果

vue实现突出效果

Vue 实现突出效果的方法 在 Vue 中实现突出效果通常涉及动态样式绑定、动画过渡或第三方库的使用。以下是几种常见实现方式: 动态类名绑定 通过 v-bind:class 或简写 :class 实…