TOC
2017年3月24日大约 1 分钟
滚动监听
滚动监听 bootstrap 实现。
借助 scrollSpy.js Github,或者自己实现监听也行。来实现属于我们的滚动监听。
原理
比如有标题如下:
滚动监听
对应的页面导航:
滚动监听
TOC
监听实现导航栏高亮代码:
/**
* 滚动监听
*/
this.scrollSpy = function()
{
var header = $("h1, h2, h3, h4, h5, h6"); //标题
header.scrollSpy();
var firstNav = $("#markdown-toc a").first(); //导航栏第一个
firstNav.addClass("active"); //初始默认为第一个高亮
header.on('scrollSpy:enter', function() {
$("#markdown-toc a").removeClass("active");
var id = $(this).attr("id");
$("#markdown-toc a[href='#"+id+"']").addClass("active");
//滚动到页面的最上方 或者是存在其他没有ID的header信息
//1.由此可见对于HEADER的定义应该更加具有区分性。
if(!id)
{
firstNav.addClass("active");
}
});
header.on('scrollSpy:exit', function() {
});
};
Note
标题可以自定义选择器,最好足够的有区分性。不会与页面其他元素混淆。
导航栏添加
active
的样式可以自定义。
(此处有一个BUG,如果文中存在id为空的header信息,会高亮错误。应该去除之前保留上一个高亮,如果ID不存在就将上一个依然设定为高亮。)
当然TOC导航栏是jekyll自动生成的,如果我们写了个静态网页。如何生成对应的TOC呢?
TOC
生成的原理也不难,只是比较繁琐。
jquery.toc 这里是一级菜单的个人实现。
For MarkDown
For HTML
贡献者
binbin.hou