书犹药也,善读可以医愚

    

使用了lazyload懒加载图片

关于图片懒加载,这个lazyload.js真的是非常好用,这下不用担心文章内图片太多影响速度了!虽然使用很方便,但是过程中也遇到了一点点小问题,这里记录一下。

源码及使用方法可以到作者的GitHub上去看一下,其实原理很简单:

  • 就是在要显示图片的img元素的src属性上先放一张用于等待加载的loading.gif小图片,那么默认加载网页的时候先加载的都是这张小图片,不管你页面上有几张图,都只要发送一次请求就够了
  • 然后在img中自定义一个data-original属性,用来存放你真实的图片地址,当然这个属性名称是可以改的,但也要相应去修改js
  • 接下来就交给js来操作了,页面加载的时候,会先将页面可见区域中的data-original的值赋给src,这样就完成了首屏的图片加载,那么位置在页面下方的其实加载的是loading.gif小图片,当页面向下滚动时,出现在可见区域中的图片src的值会一一被替换成data-original中的值,这样来完成图片的加载

思路是不是很简单?但是却节省了大量的时间,特别是当页面中图片很多的时候

让文章列表页的缩略图懒加载

代码示例,原先加载图片的方式:

<img src="https://kisxy.com/image/avatar.png">

那么使用懒加载方式的时候,加载图片的方式应变为:

<img data-original="https://kisxy.com/image/avatar.png" src="loading.gif">

当然仅仅这样是不够的,你还要引入lazyload.js:

<script src="https://cdn.bootcss.com/jquery_lazyload/1.9.7/jquery.lazyload.min.js"></script>

然后绑定到元素,给img标签添加一个类,例如lazyload:

<img class="lazyload" data-original="https://kisxy.com/image/avatar.png" src="loading.gif">

接下来最后一步,在footer中加入以下代码,这将使得所有class为lazyload的元素被延迟加载:

<script type="text/javascript">
  // 或加入某些效果
  $(".lazyload").lazyload({
      effect : "fadeIn",
      container: $("#content")
  });
</script>

其中的container中的#content是指你存放图片的容器。开始的时候我没有加这个,导致页面加载时只加载了首屏的图片,页面滚动时并没有懒加载图片,查询文档之后,原先默认生效的是针对浏览器最外层的滚动条,自定义布局中的滚动条无法被识别到,所以需要添加一个容器标识,让在特定容器中的图片实现懒加载的效果。

其中的effect的fadeIn表示渐现的效果。

让文章页中的图片懒加载

在typecho中,文章的列表页是通过while循环来输出的,所以我们只要在index.php文件中找到输出图片的部分,按照上述方法修改代码即可以实现效果。那么在文章页内的图片要怎么操作?typecho输出文章内容就是这一段:

<?php $this->content(); ?>

就输出了整个文章内容了,没有单独的img元素给你编辑,怎么办?我先去文章页查看源码,发现输出图片的位置都是以这样的代码形式来输出:

<p><img src="xxxxxxxxxxxxxxxxxxxxxx"></p>

那么其实我们是要找到修改文章内容输出时的img元素属性的方法就可以了,例如将文章中所有img段的代码修改为我们需要实现懒加载的代码格式。所以这时候需要在主题的functions.php文件中去处理了,有些主题可能没有这个文件,那么就自己新建一个。

我们可以利用php的preg_replace来正则匹配并替换正确的内容达到修改文章内容的目标,在functions.php中编辑以下代码:

<?php
    function themeInit($archive)
    {
        if ($archive->is('single'))
        {
            $archive->content = image_class_replace($archive->content);
        }
    }
    function image_class_replace($content)
    { 
        $content = preg_replace('#<img(.*?) src="([^"]*/)?(([^"/]*)\.[^"]*)"(.*?)>#',
            '<img$1 data-original="$2$3"$5 class="lazyload" src="https://kisxy.com/image/loading.gif">', $content);
        return $content;
    }
?>

然后刷新页面看效果吧!

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

  Previous post 火狐升级后发现问题
Next post   明天即将出发

已有 13 条评论

  1. 懒加载是个挺好的东西,可惜我的主题主打文字,要不也加上了,不过可能会自己写,不想再引用库了( ̄。。 ̄)
    1. 回复 JIElive: 嗯,我目前用了三个库,不想再加了,再加就要有影响了。
  2. 我今天细细的检查了下,发现我的网站虽然用了lazyload,但实际数据里,还是会加载了图片的,怪了,这样的话就起不到加快网站加载的速度了,郁闷了
    1. 回复 爱CSS: 我看了下你的,是正常的呀,页面滚动的时候才加载图片
      1. 回复 小宇: 不正常呀,我今天正在改呢,原来不可以在jq加添加data-original属性的,这样实际上重复加左了,刚改好,现在才是真的快了
        1. 回复 爱CSS: lazyload.js早期版本的时候是没有data-original的,所以会导致图片全部加载出来的情况,后来作者修复了,所以现在只要在IMG标签中把真实地址指定到data-original里就行了,SRC存放loading图
    2. 回复 爱CSS: 你是说页面打开时在页面下方的真实图片也被加载了吗?
      1. 回复 小宇: 是呀,今天才全部改回来了,真是郁闷
  3. 引导页做的很不错,然后...让我又了解了一个新的WOW.js,天啦噜前端更新太快了
    1. 回复 程志辉: 呃嘿嘿。。。话说那个其实很早就出来啦。
  4. 你也用上Load图片了,挺好这个,确实对浏览有很好的体验,今晚吃完饭后一直在想一个问题,发现我的网站越弄越复杂了,不简洁了,好纠结,到底要不要还原了,太复杂了有时感觉
    1. 回复 爱CSS: 确实能大大提升体验哈。我这个改得差不多了,现在我就想有时间的话,我写一个自已的主题了,感觉tpyecho的不难,相比wordpress来说要简单得多。

添加新评论

  Timeline:一生

那一条老街之中
居住着许多老人
每隔一段时间
就有一个生命从老街中逝去
住在这条街道的人渐渐习惯
人到了岁数
是不得不离开的
渐渐消失的生命
无论各自经历了怎样的一生
最终都是安安静静地离去了
留不得一点东西

updated on :

  关于博主

84年,天秤座与处女座交接,有一点点强迫症,性格诡异,情绪复杂多变。爱好健身、跑步,一年必跑一场全程马拉松,N场半程马拉松。也喜欢听歌与阅读,喜欢接触新鲜事物。座右铭:活到老,学到老,生命在于运动!

  近期评论

  •  程志辉: 宇哥的网站啥时候恢复哇
  •  阿怡: 二级分类相册不可以继承。不知道怎么改。
  •  阿怡: 二级分类相册不可以继承。不知道怎么改。
  •  kaio: 这网站真棒。做个参考
  •  姑姑: 这个名字秒啊
  •  Liu先生的故事小屋: 友链更名 原名 -小酱博客 现名-Liu先生的故事小屋 麻烦博主换一下友链名
  •  御宅男: 码农路过,留下一个爪印!!!!
  •  林叶展弟弟: 我自己魔改了一些,都是在文件里直接改的,每次更新还是不辞辛苦改一改。
  •  御宅男: 瓜农路过 留下一个爪印
  •  白: 谢谢你!

  分类目录

你是否在某个夜深人静的时刻,静静地听着Bressanone,思念着某人。—— by 小宇

每个人心里都有一段伤痕,时间才是最好的疗剂。

人总是珍惜未得到的,而遗忘了所拥有的。

退一步,并不象征我认输;放手,并不表示我放弃;微笑,并不意味我快乐!

人海中再回首,朋友真诚依旧,生命里重逢,心境平和温柔,往事如风,岁月如歌,漫漫人生路,苍桑几许,幸福几何!