当前位置:首页 > JavaScript

js实现tab栏目

2026-02-03 01:55:38JavaScript

使用HTML和CSS构建基础结构

HTML部分需要创建tab的标题和内容区域,通常使用无序列表<ul><div>实现。CSS负责样式布局,如高亮当前选中的tab。

<div class="tab-container">
  <ul class="tab-header">
    <li class="active">Tab 1</li>
    <li>Tab 2</li>
    <li>Tab 3</li>
  </ul>
  <div class="tab-content">
    <div class="content-item active">Content 1</div>
    <div class="content-item">Content 2</div>
    <div class="content-item">Content 3</div>
  </div>
</div>
.tab-header {
  display: flex;
  list-style: none;
  padding: 0;
  margin: 0;
}
.tab-header li {
  padding: 10px 20px;
  cursor: pointer;
  border: 1px solid #ddd;
  background: #f1f1f1;
}
.tab-header li.active {
  background: #fff;
  border-bottom: 1px solid #fff;
}
.tab-content .content-item {
  display: none;
  padding: 20px;
  border: 1px solid #ddd;
  border-top: none;
}
.tab-content .content-item.active {
  display: block;
}

通过JavaScript添加交互逻辑

使用事件监听实现点击切换功能。核心逻辑是移除所有元素的active类,再为当前点击的元素添加该类。

document.addEventListener('DOMContentLoaded', function() {
  const tabs = document.querySelectorAll('.tab-header li');
  const contents = document.querySelectorAll('.content-item');

  tabs.forEach((tab, index) => {
    tab.addEventListener('click', () => {
      // 移除所有active类
      tabs.forEach(t => t.classList.remove('active'));
      contents.forEach(c => c.classList.remove('active'));

      // 添加当前active类
      tab.classList.add('active');
      contents[index].classList.add('active');
    });
  });
});

动态生成Tab内容

若需从数据动态生成tab,可通过遍历数组创建DOM元素。

const tabData = [
  { title: 'News', content: 'Latest updates...' },
  { title: 'Weather', content: 'Forecast details...' }
];

function renderTabs() {
  const header = document.querySelector('.tab-header');
  const content = document.querySelector('.tab-content');

  tabData.forEach((item, i) => {
    // 创建标题
    const li = document.createElement('li');
    li.textContent = item.title;
    if (i === 0) li.classList.add('active');
    header.appendChild(li);

    // 创建内容
    const div = document.createElement('div');
    div.textContent = item.content;
    div.classList.add('content-item');
    if (i === 0) div.classList.add('active');
    content.appendChild(div);
  });
}

支持URL哈希定位

通过监听hashchange事件实现URL哈希切换tab,增强用户体验。

js实现tab栏目

window.addEventListener('hashchange', () => {
  const hash = window.location.hash.substr(1);
  const targetTab = document.querySelector(`[data-tab="${hash}"]`);
  if (targetTab) targetTab.click();
});

// 修改点击事件,同步哈希
tabs.forEach(tab => {
  tab.addEventListener('click', () => {
    window.location.hash = tab.dataset.tab;
  });
});

标签: 栏目js
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…

js实现图片移动

js实现图片移动

使用CSS和JavaScript实现图片移动 方法一:使用CSS动画结合JavaScript控制 通过CSS定义动画关键帧,JavaScript动态添加或移除动画类。 /* CSS部分 */ .m…