给 Jekyll 的 Toc 设置 Scrollspy
向 JavaScript 低头了,投降!
Jekyll 虽好,但是也很「毛坯」。
比如常见的目录随页面滚动自动高亮就缺失了,这也是坚守 Jekyll 的代价了。
问题
之前的状态
之前的 Toc 是利用 Jekyll-toc 插件实现的,搭配 CSS 实现了常驻在页面左侧的效果。
但是这次写 2024 年度回顾吃了瘪:想要更清晰的分级,于是目录搞得很长,没有自动的高亮和自动随内容滚动,显得很别扭。虽然靠着分成三部分解决了问题,但是分成三部分这个本身我就不是很喜欢。
想要的效果
- 高亮显示当前段落 Toc。
- 随着页面滚动,必要时同步滚动 Toc。
实现方式
Toc 可以用静态方式实现,但是要动态更换高亮项目恐怕就绕不开 JavaScript 了。不过还是有一点最后的坚持:尽可能降低禁用 JavaScript 时对页面的影响。
一点弯路
做了一些搜索之后将目标放在了 scrollnav 上。但是简单的折腾了一下之后(顺便感谢疑似感冒神志不清,一开始折腾一半就顶不住睡觉去了)发现不太符合要求:
- 不能随着内容滚动 toc 内容
- 只支持 h2 单一层级
- 关了 JavaScript 就啥都没了
还是 AI 吧
最后看了一圈决定还是投降,找 AI 吧。你们网页技术我是真的不懂。
总之是在先问 GPT 给了一个还不错的答案之后,重新问 Gemini 1.5 pro 再加上自己调整之后得到了下面的东西:
于是效果就是如你所见这样了。