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

简介: 这个插件根据选定的目录内容中的 h1, h2, h3, h4, h5, h6 标签来自动生成目录插入到选定的目录容器中,并且提供一个漂亮的样式效果。监听内容区滚动点击跳转功能兼容性:IE10+ (由于使用了 node.classList)地址戳这里 github地址,欢迎star,issue,pr ~感兴趣的同学可以加文末的微信群,一起聊聊吧~

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


  • 监听内容区滚动


  • 点击跳转功能


兼容性:IE10+ (由于使用了 node.classList)


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


感兴趣的同学可以加文末的微信群,一起聊聊吧~


1. 预览


炫酷模式:


微信截图_20220426210944.png


普通模式:


微信截图_20220426210949.png


可以通过 线上DEMO 来预览一下炫酷模式的效果


2. 实现思路


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

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


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


3. Api


如果要使用默认的样式,请手动引入


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



相关文章
|
XML 缓存 NoSQL
玩转Spring Cache --- 整合进程缓存之王Caffeine Cache和Ehcache3.x【享学Spring】(下)
玩转Spring Cache --- 整合进程缓存之王Caffeine Cache和Ehcache3.x【享学Spring】(下)
|
人工智能 编解码 5G
虚拟现实(VR)与增强现实(AR)的融合:开启全新交互时代
【6月更文挑战第17天】虚拟现实(VR)与增强现实(AR)融合成混合现实(MR),打造全新交互体验。MR结合VR的沉浸感和AR的现实增强,应用于教育、游戏、设计和营销,带来创新教学方式、沉浸式游戏体验和高效设计工具。尽管面临技术挑战,随着5G和AI的发展,MR有望引领未来交互的革命。
|
小程序
微信小程序 | 吐血整理的日历及日程时间管理
微信小程序 | 吐血整理的日历及日程时间管理
3951 0
微信小程序 | 吐血整理的日历及日程时间管理
|
负载均衡 算法 Linux
深入理解Linux内核进程CPU负载均衡机制(上)
深入理解Linux内核进程CPU负载均衡机制
|
关系型数据库 MySQL API
Python管理系统源代码
本文介绍了多种基于Python和相关技术的管理系统源代码,包括学生信息管理、图书管理、ERP、异常管理、考试系统等。提供了64个源代码供下载,适用于不同场景和个人项目需求。下载链接:https://pan.baidu.com/s/1hXPLbKHMpBDhlFVv1kdMxA?pwd=8888,提取码:8888。欢迎使用和支持。
367 3
|
NoSQL Redis
蓝易云 - redis报错WRONGTYPE Operation against a key holding the wrong kind of value
解决这个问题的方法是检查你的代码,确保你对每个键使用的命令与该键的类型匹配。你可以使用 `TYPE`命令来确定一个键的类型。例如,`TYPE mykey`将返回 `mykey`的类型。
453 3
|
资源调度 前端开发 JavaScript
构建高效前端项目:模块化与组件化的最佳实践
【2月更文挑战第13天】在现代前端开发的浪潮中,模块化和组件化已经成为提升项目可维护性和开发效率的核心原则。本文深入探讨了如何通过合理的模块划分、组件设计以及工具选择来优化前端项目结构,同时确保代码的复用性和可测试性。我们将从理论出发,结合实例分析,为前端开发者提供一套行之有效的最佳实践指南。
617 0
|
缓存 小程序 IDE
【每周一个小技巧】支付宝小程序自定义tabbar效果
【每周一个小技巧】支付宝小程序自定义tabbar效果
434 2
|
存储 SQL 关系型数据库
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
671 0
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)