一个骚气的文章目录自动生成器了解一下

这个插件根据选定的目录内容中的 h1, h2, h3, h4, h5, h6 标签来自动生成目录插入到选定的目录容器中,而且提供一个漂亮的样式效果css

  • 监听内容区滚动
  • 点击跳转功能

兼容性:IE10+ (因为使用了 node.classList)html

地址戳这里 github地址,欢迎star,issue,pr ~前端

1. 预览

炫酷模式:vue

clipboard.png

普通模式:node

clipboard.png

能够经过 线上DEMO 来预览一下炫酷模式的效果git

2. 实现思路

滚动的监听经过 getBoundingClientRect 获取元素大小以及相对视口的位置,判断咱们的监听对象 h1~h6 标签是否在视口中,若是在则添加 linkActiveClass 类。github

传统的锚点定位跳转会与hash模式的单页面应用的路由冲突,会导航到错误的路由路径,这里采用把要跳转的id放到 dataset 中,跳转的时候取出来使用 scrollIntoView 来进行平滑滚动到目标位置。微信

左边的边栏线则是使用 svg 的path来画出来的,根据层级相应作一些调整,辅以css的 transition 的效果就能够呈现出不错的移动效果。app

3. Api

若是要使用默认的样式,请手动引入svg

import 'progress-catalog/src/progress-catalog.css'

使用方法:

// 引入
import Catalog from 'ProgressCatalog'

// 使用 
new Catalog({
    contentEl: 'loading-animation',
    catalogEl: `catalog-content-wrapper`,
    selector: ['h2', 'h3']
})

构造函数接受的参数:

contentEl [String]

须要检索生成目录的内容区的id选择器,不须要加#

catalogEl [String]

将生成的目录append进的目录容器的id选择器,不须要加#

scrollWrapper [可选, String]

监听scroll事件的内容区容器的id选择器,不须要加#,若是不填则默认是 contentEl 的父元素

linkClass [可选, String]

全部目录项都有的类,默认值:cl-link

注意,若是设置了此值,则须要重写默认样式

linkActiveClass [可选, String]

激活的目录项全部的类,默认值:cl-link-active

注意,若是设置了此值,则须要重写默认样式

selector [可选, Array]

选择目录的标题标签,默认值:['h1', 'h2', 'h3', 'h4', 'h5', 'h6']

若是只但愿生成目标内容区的 h2, h3 标签的目录,那么能够设置 selector: ['h2', 'h3']

activeHook [可选, Function]

当激活新的目录项标签的时候的回调函数

topMargin [可选, Number]

第一个目录标签在被认为可见以前须要向下移动的距离,默认值:0

bottomMargin [可选, Number]

同上,向下移动的距离,默认值:0

cool [可选, Boolean]

炫酷模式开关,默认值:true


网上的帖子大多深浅不一,甚至有些先后矛盾,在下的文章都是学习过程当中的总结,若是发现错误,欢迎留言指出~

参考:

  1. 阮一峰 - SVG 图像入门教程
  2. Codepen - Progress Nav
  3. MDN - scrollIntoView
  4. MDN - HTMLElement.dataset

PS:欢迎你们关注个人公众号【前端下午茶】,一块儿加油吧~

另外能够加入「前端下午茶交流群」微信群,长按识别下面二维码便可加我好友,备注加群,我拉你入群~

相关文章
相关标签/搜索