当前位置:首页 > JavaScript

实现目录js

2026-04-05 17:27:52JavaScript

实现目录功能的 JavaScript 方法

动态生成目录结构

通过遍历 HTML 文档中的标题标签(如 h1, h2, h3 等),动态创建目录列表。使用 document.querySelectorAll 获取所有标题元素,并为每个标题生成对应的目录项。

function generateTOC() {
  const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
  const tocContainer = document.createElement('div');
  tocContainer.id = 'toc';

  headings.forEach((heading, index) => {
    const level = parseInt(heading.tagName.substring(1));
    const indent = (level - 1) * 20;
    const tocItem = document.createElement('div');
    tocItem.style.marginLeft = `${indent}px`;
    tocItem.innerHTML = `<a href="#${heading.id || `heading-${index}`}">${heading.textContent}</a>`;
    tocContainer.appendChild(tocItem);
  });

  document.body.prepend(tocContainer);
}

平滑滚动效果

为目录链接添加平滑滚动行为,提升用户体验。使用 scrollIntoView 方法实现平滑滚动效果。

document.querySelectorAll('#toc a').forEach(link => {
  link.addEventListener('click', function(e) {
    e.preventDefault();
    const targetId = this.getAttribute('href').substring(1);
    const targetElement = document.getElementById(targetId);
    targetElement.scrollIntoView({ behavior: 'smooth' });
  });
});

自动高亮当前阅读位置

监听滚动事件,根据当前视口位置高亮对应的目录项。通过比较元素位置与视口位置,确定当前阅读的章节。

window.addEventListener('scroll', function() {
  const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
  let currentHeading = null;

  headings.forEach(heading => {
    const rect = heading.getBoundingClientRect();
    if (rect.top >= 0 && rect.top <= 200) {
      currentHeading = heading;
    }
  });

  if (currentHeading) {
    document.querySelectorAll('#toc a').forEach(link => {
      link.classList.remove('active');
      if (link.getAttribute('href') === `#${currentHeading.id}`) {
        link.classList.add('active');
      }
    });
  }
});

CSS 样式增强

为目录添加基本样式,包括字体、间距和活动状态指示。

#toc {
  position: fixed;
  left: 20px;
  top: 20px;
  background: white;
  padding: 10px;
  border: 1px solid #ddd;
  max-width: 300px;
  max-height: 80vh;
  overflow-y: auto;
}

#toc a {
  display: block;
  padding: 5px 0;
  color: #333;
  text-decoration: none;
}

#toc a.active {
  font-weight: bold;
  color: #0066cc;
}

响应式设计考虑

添加媒体查询确保目录在不同设备上都能正常显示和使用。

@media (max-width: 768px) {
  #toc {
    position: static;
    max-width: 100%;
    margin-bottom: 20px;
  }
}

初始化调用

在页面加载完成后自动生成目录。

实现目录js

document.addEventListener('DOMContentLoaded', function() {
  generateTOC();
});

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

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…