js实现tab
实现 Tab 的基本思路
使用 JavaScript 实现 Tab 切换功能,通常需要结合 HTML 和 CSS 完成。核心逻辑是通过事件监听控制不同内容的显示与隐藏。
HTML 结构
<div class="tab-container">
<div class="tab-buttons">
<button class="tab-button active" data-tab="tab1">Tab 1</button>
<button class="tab-button" data-tab="tab2">Tab 2</button>
<button class="tab-button" 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-button {
padding: 10px 20px;
background: #eee;
border: none;
cursor: pointer;
}
.tab-button.active {
background: #ddd;
}
.tab-content {
display: none;
padding: 20px;
border: 1px solid #ddd;
}
.tab-content.active {
display: block;
}
JavaScript 实现
document.addEventListener('DOMContentLoaded', function() {
const buttons = document.querySelectorAll('.tab-button');
const contents = document.querySelectorAll('.tab-content');
buttons.forEach(button => {
button.addEventListener('click', () => {
// 移除所有按钮和内容的 active 类
buttons.forEach(btn => btn.classList.remove('active'));
contents.forEach(content => content.classList.remove('active'));
// 为当前按钮添加 active 类
button.classList.add('active');
// 显示对应的内容
const tabId = button.getAttribute('data-tab');
document.getElementById(tabId).classList.add('active');
});
});
});
功能优化
为提升用户体验,可以添加过渡动画效果:

.tab-content {
opacity: 0;
transition: opacity 0.3s ease;
}
.tab-content.active {
opacity: 1;
}
动态添加 Tab
如果需要支持动态添加 Tab,可以修改 JavaScript 代码:

function setupTabs() {
const container = document.querySelector('.tab-container');
container.addEventListener('click', (e) => {
if (e.target.classList.contains('tab-button')) {
const tabId = e.target.getAttribute('data-tab');
// 更新按钮状态
container.querySelectorAll('.tab-button').forEach(btn => {
btn.classList.toggle('active', btn === e.target);
});
// 更新内容显示
container.querySelectorAll('.tab-content').forEach(content => {
content.classList.toggle('active', content.id === tabId);
});
}
});
}
document.addEventListener('DOMContentLoaded', setupTabs);
响应式设计考虑
针对移动设备,可以调整 Tab 的布局:
@media (max-width: 768px) {
.tab-buttons {
display: flex;
overflow-x: auto;
}
.tab-button {
flex: 1;
white-space: nowrap;
}
}
无障碍支持
为提升无障碍体验,可以添加 ARIA 属性:
<div role="tablist" class="tab-buttons">
<button role="tab" aria-selected="true" aria-controls="tab1">Tab 1</button>
<button role="tab" aria-selected="false" aria-controls="tab2">Tab 2</button>
</div>
<div class="tab-contents">
<div role="tabpanel" id="tab1" aria-labelledby="tab1">Content 1</div>
<div role="tabpanel" id="tab2" aria-labelledby="tab2" hidden>Content 2</div>
</div>
对应的 JavaScript 也需要更新以管理这些属性。






