image
github地址lozad.js
前几天在公众号上看到github上一些受欢迎的项目,其中就有lozad.js,据说碾压jquery.lazyload.js。而自己也一直想给自己博客添加惰性加载以提高页面打开速度(没办法,git略卡,aplayer音乐播放器和cnzz统计都被舍弃了)

介绍

使用请参照github上的README.md中的Usage,英文实在看不懂可以参照sf的这篇文章《lozad.js:懒加载神器》,以及阮老师的文章

实战-给主题添加

首先给列表页面(category-items.ejs)加上了对应的class和data-src,然后在layout.ejs里面加上了

1
2
3
4
$(function () {
const observer = lozad();
observer.observe();
});

测试通过。

实战-修改代码使hexo生成的img加上class和data-src

列表页是在模板(themes)来编写的,自然能找到对应的img元素代码,给其加上class和data-src并不是难事。接下来遇到了个问题,要给文章中的图片也加上对应的class和data-src就不容易了。
因为文章的内容是在hexo的变量中,

全局变量

变量 描述
site 网站变量
page 针对该页面的内容以及 front-matter 所设定的变量。
config 网站配置
theme 主题配置。继承自网站配置。
_ (单下划线) Lodash 函数库
path 当前页面的路径(不含根路径)
url 当前页面的完整网址
env 环境变量

页面变量

变量 描述
page.title 页面标题
page.date 页面建立日期(Moment.js 对象)
page.updated 页面更新日期(Moment.js 对象)
page.comments 留言是否开启
page.layout 布局名称
page.content 页面的完整内容
page.excerpt 页面摘要
page.more 除了页面摘要的其余内容
page.source 页面原始路径
page.full_source 页面的完整原始路径
page.path 页面网址(不含根路径)。我们通常在主题中使用 url_for(page.path)。
page.permalink 页面的完整网址
page.prev 上一个页面。如果此为第一个页面则为 null。
page.next 下一个页面。如果此为最后一个页面则为 null。
page.raw 文章的原始内容
page.photos 文章的照片(用于相簿)
page.link 文章的外部链接(用于链接文章)

其中page.content就是文章的内容了,接下来就是找到hexo是在哪里把markdown解释成html了。推荐一篇《hexo是怎么工作的》,可惜没有讲到对应的源代码,不过受他启发,去找对应的源代码。一开始觉得大概率是在生成的时候解析的,于是在image这几个generator的文件夹中找?怎么找,sublime中右键[图片上传失败…(image-67a3c5-1510805619540)]选择Find in Folder就行,我选择查找的关键字是<img src=,可惜没有找到对应的源码。
接着在渲染的image这几个renderer文件夹中找,其实看文件夹名就能看出端倪,hexo-renderer-ejs对应ejs,hexo-renderer-stylus对应syl,hexo-renderer-marked对应markdown咯。
打开对应的README.md就看见你这么一句

1
Add support for [Markdown]. This plugin uses [marked] as render engine.

看来是找到了。查找发现真正的位置在image这里,\node_modules\_marked@0.3.6@marked\lib\marked.js在这个js中解析的markdown,接下来就好办了,把对应解析图片那段代码添加class和data-src即可。修改好记得

1
2
hexo clean
hexo g

清空重新生成一下。
ok,文章图片也实现了惰性加载

希望这篇文章能给你带来知识和乐趣,喜欢博主的文章可以加博主好友哦

有好的文章也可以向博主投稿哦