码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 生成页面文章 滚动目录(编目)

时间:2020-03-13 20:53:21      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:href   his   这一   off   let   标题   大致   清除   变量   

一篇文章显示在浏览器中,如果文章足够长,那么滚动条亦会非常长,因此,我们最好给文章加上 文章目录,同时告知用户,当前所浏览的文章位置。

缘由

由于项目中需要实现这一功能,所以我便到搜索引擎中寻找对应的插件,必应,百度,搜狗(Google因软件问题无法访问),可惜的是,没有对应的插件可供使用。
所以,我经过简单画图,大致明白了实现一个动态的文章目录需要的变量以及步骤

简单了解,什么是 文章目录(编目)?

每一篇文章都会有 标题,子标题,这些标题组成起来便是文章的目录,即编目
让我们先来简单看看基本的文章目录由什么组成吧:

技术图片

图中的是 百度百科 的文章编目,当你浏览到了哪里,那么对应的文字编目便提示你浏览到了哪里。

实现这样功能的简单原理图

技术图片

当元素的相对高度进入浏览区域后,则说明此元素正在被用户所阅读。
当然,这个浏览触发区域可以自行设置 :)

重要的变量

  • 元素的相对高度(可能为负值)
  • 浏览触发区域
  • 元素底部相对高度

浏览器高度是不必我们理会的 :) 所以我们先来设置一个程序执行步骤:
触发条件:用户滚动页面
步骤:

  • 检查是否初始化 -> 否
    • 寻找所有的被标记的元素
    • 将被标记元素的信息载入至‘浏览概要’中
  • 遍历所有页面标题,包括副标题
    • 判断元素的相对高度是否小于 0 (即负值) -> 已经浏览过了
      • 判断元素底部相对高度(即相对高度+元素本身高度)是否大于浏览区域的最小值
        • 是(处于浏览区域)将所有浏览概要标题重置标记,后寻找对应的浏览概要标题,并进行浏览标记后 break(不必继续执行);
    • 判断元素的相对高度是否处于浏览区域
      • 是(处于浏览区域)将所有浏览概要标题重置标记,后寻找对应的浏览概要标题,并进行浏览标记后 break(不必继续执行);
    • 否 继续遍历

结语

我并不清楚这个执行步骤写得是否详细,所以有问题可以留言,我会进行答复。
这样一来,我们就可以做出一模一样的 文章目录 当前浏览位置了。
值得注意的是,触发条件一定需要延迟执行,可以是 100ms - 300ms 之中,不过仍然可以视情况指定延迟时间。

// 是否已经初始化 -> 忽略初始化的步骤
if ( this.init ) {
  for (let i = 0; i < allBrowse.length; i++) {
    // 是否当前浏览元素的相对位置大于 0 
    if ( MTools.getElementViewTop(allBrowse[i]) > 0 ) {
      // 当前浏览元素的相对位置是否处于 浏览区域 中
      if (210 > MTools.getElementViewTop(allBrowse[i]) && MTools.getElementViewTop(allBrowse[i]) > 120) {
        // 清除浏览标记
        clearBrowserMark();
        // 寻找对应的‘浏览概要’中的位置并标记
        browserMark(allBrowse[i]);
        break;
      }
    }
    // 获取其底部在视窗的位置 是否处于浏览点之下
    if ((MTools.getElementViewTop(allBrowse[i]) + allBrowse[i].offsetHeight) > 120) {
      // 清除浏览标记
      clearBrowserMark();
      // 寻找对应的‘浏览概要’中的位置并标记
      browserMark(allBrowse[i]);
      break;
    }
  }
}

我觉得已经够详细了。。关于 MTools 是一个前端开源工具包,内涵大量兼容或常用工具,虽然大部分来自网络;
其实来自网络的代码片段是我不喜欢重复造轮 :)
不过我自己手写了事件处理、动画部分和修改部分网络上的代码片段(IE 的话没仔细测试)
其中也有我自己所写的小工具 :)

本文来自 https://www.cnblogs.com/chongsaid/
转载请注明本文地址,否则视为侵犯著作权。

2020-03-13 写于揭阳

JavaScript 生成页面文章 滚动目录(编目)

标签:href   his   这一   off   let   标题   大致   清除   变量   

原文地址:https://www.cnblogs.com/chongsaid/p/javascript_article_directory.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!