记得之前在yilia主题常见问题及解决办法下文章中解决了移动端不显示目录的问题
这篇文章分享一下自己优化yilia主题目录的代码,主要体现在以下几个方面:
1.通过jquery封装的animate()锚点跳转方法替换主题自带的a标签跳转,解决添加aplayer播放器可能出现的锚点跳转失效问题
2.实现浏览器根据当前页面位置实时更新页面url(需手动设置生效)
3.目录随着页面位置滚动,实现动态目录
- 更新:
- Hexo 5.0.0 Released 可能导致目录锚点跳转失效的解决办法
- 近期,更新hexo5.0,发现本篇文章介绍的目录锚点跳转功能已失效,控制台提示
Uncaught Error
错误,发现依然是url转码导致 - 解决办法:对
toToc()
函数中$(this).attr('href')
修改为decodeURI($(this).attr('href'))
,即添加decodeURI()
函数 - 对
currentActive.attr('href')
添加decodeURI()
函数,即decodeURI(currentActive.attr('href'))
- 近期,更新hexo5.0,发现本篇文章介绍的目录锚点跳转功能已失效,控制台提示
- 动态目录失效
- hexo5.0,对目录a标签href内容添加
encodeURI()
函数进行编码,使动态目录失效 - 解决办法:将
$('.toc-link[href="' + currentId + '"]')
中currentId
添加编码函数encodeURI()
,即$('.toc-link[href="' + encodeURI(currentId) + '"]')
- 注意:此方法可能不适用所有hexo版本,取决于hexo是否对目录a标签href内容添加
encodeURI()
函数进行编码
- 注意:此方法可能不适用所有hexo版本,取决于hexo是否对目录a标签href内容添加
- hexo5.0,对目录a标签href内容添加
- Hexo 5.0.0 Released 可能导致目录锚点跳转失效的解决办法
效果参看本博客
参考资料
参考hexo-theme-butterfly主题实现动态目录功能,在此表示感谢
因为主题目录布局不同,没有在yilia主题目录上实现页面当前位置百分比(你已经读了%)
感觉没有必要,因为yilia主题的目录是鼠标悬停显示的,不同于其它主题那样固定在页面的某个位置,显示页面当前所在目录位置很有必要
代码实现
此代码基于jquery实现
1 | /* |
以上代码是基于yilia主题优化的,在其他主题使用可能不生效
在yilia\layout\_partial\after-footer.ejs
文件中的yiliaConfig
变量中添加anchor
获取主题配置文件中anchor
的值
1 | anchor: <%=theme.anchor%> |
主题配置
在主题的script.ejs文件中创建一个script标签,将上面的代码粘贴到script标签中即可
主题配置文件中(_config.yml
)添加如下配置,实现浏览器根据当前页面位置实时更新页面url:
1 | # anchor 目录锚点url |
切记在yiliaConfig
变量中添加anchor
既然实现动态目录,自然要对动态目录添加一些样式,在主题的css文件中添加相应样式:
1 | /* 动态目录 */ |
将当前目录加粗,并且显示为红色进行区分,根据自己需要更改