当我们浏览图片比较多的博客时,如果发现下拉滚动条图片才加载(图片延迟加载),这应该是一个很酷的用户体验。这一效果是通过jQuery插件实现的。所谓的jQuery插件就是用JavaScript编写的一段Js文件。通过加载这一插件,我们能够实现长页面中图片延迟加载的效果,也就是在浏览器可视区域外的图片不会被载入,直至将页面滚动到可视区域才加载相应图片。 使用这个插件可以加速载入包含有很多图片的文章。浏览器将会在加载可见图片之后进入就绪状态。在某些情况下还可以降低服务器负担.
实现这一效果的jQuery插件叫做:lazyload (下载地址)
由于我的博客经常有大量的图片,所以我折腾了一下,成功的实现了这个效果,感觉确实加快了访问多图片文章的载入速度。
我的具体实现如下:
1.下载lazyload.js并上传到主题相应的目录中
2.在header.php文件</head>标签前(最好在<?php wp_head(); ?>语句前)添加如下代码:
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js”></script>
<script type=”text/javascript” src=”<?php bloginfo(‘template_directory’);?>/js/jquery.lazyload.js”></script>
<script type=”text/javascript”>
$(function() {
$(“img”).lazyload({
placeholder : “<?php bloginfo(‘template_directory’);?>/images/grey.gif”,
effect : “fadeIn”
});
});
</script>
第1行市说明调用jQuery库
第2行是说明lazyload.js文件的载入位置,<?php bloginfo(‘template_directory’);?>是调用相应主题路径的语句。
第5行img是延迟加载所有图片,可根据实际情况更改,有时候我们并不想将侧边栏的留言者的头像延迟加载,而只是要实现文章中的图片使用该效果,则根据实际情况修改相应的img语句即可,比如#post img
第6行语句是在图片加载前先用一个透明的灰色1×1像素的图片进行占位。
第7行是实现图片“淡入”的效果
当然上述只是我目前网页中的实现效果,它其他可用的效果还有很多,我就简略说一下:
1.当图片没有看到之前先把图片载入200像素(不设置的话,默认载入像素是零)
$(“img”).lazyload({ threshold : 200 });
2.在图片加载前先用一个透明的灰色1×1像素的图片进行占位
$(“img”).lazyload({ placeholder : “img/grey.gif” });
3.自定义触发事件进行载入:比如“click”(鼠标点击)和”mouseover”(鼠标滑过)等事件触发加载图片,使用自定义的事件, 如: sporty 和 foobar;默认情况下处于等待状态, 直到用户滚动到窗口上图片所在位置。 在灰色占位图片被点击之前阻止加载图片:
$(“img”).lazyload({
placeholder : “img/grey.gif”,
event : “click”
});
4.通过定义effect 参数来定义一些图片显示效果,比如fadeIn
$(“img”).lazyload({
placeholder : “img/grey.gif”,
effect : “fadeIn”
});
5.图片在容器内显示:可以将插件用在可滚动容器的图片上, 例如带滚动条的 DIV 元素. 你要做的只是将容器定义为 jQuery 对象.
CSS文件中:
#container {
height: 600px;
overflow: scroll;
}
JavaScript 代码:
$(“img”).lazyload({
placeholder : “img/grey.gif”,
container: $(“#container”)
});
6.当图片不连续时:当图片不是连续排列,我们滚动页面的时候,lazy load会循环加载图片。在循环加载中,它会检查图片是否在可见区域内,默认情况是在找到第一张不在可视区域内的图片后,会停止循环。图片被认为是流式分布的, 图片在页面中的次序和 HTML 代码中次序相同. 但是在一些布局中, 这样的假设是不成立的. 不过你可以通过 failurelimit 选项来控制加载行为.
$(“img”).lazyload({
failurelimit : 10
});
设定failurelimint参数为10,它会当载入10张照片之后,停止寻找图片载入;
7.延迟载入图片:Lazy Load 插件的一个不完整的功能, 但是这也能用来实现图片的延迟加载. 下面的代码实现了页面加载完成后再加载. 页面加载完成 5 秒后, 指定区域内的图片会自动进行加载.
$(function() {
$(“img:below-the-fold”).lazyload({
placeholder : “img/grey.gif”,
event : “sporty”
});
});
$(window).bind(“load”, function() {
var timeout = setTimeout(function() {$(“img”).trigger(“sporty”)}, 5000);
});
具体文章参见《Lazy Load Plugin for jQuery》
1楼 于 2010-7-19 16:57
于 2010-7-19 22:49
@NFPlayEr 确实很强大!
2楼 于 2010-8-29 18:14
于 2010-8-29 18:36
@sunyixiang 其实就是上传个文件,修改一下代码就OK了
于 2010-8-29 19:42
@Qiankun 修改一下代码?我看你写的要修改好多,而且我不知道应该把那些代码加在哪里?
于 2010-8-29 19:55
@sunyixiang 下载lazyload,将里面的js文件和gif文件上传WordPress空间主题内,然后参照我最开始的说明步骤将代码加在header.php或footer.php中就行了。
3楼 于 2010-8-29 19:49
顺便说下,我博客的图片全部是外链的,这个管用么?
于 2010-8-29 19:57
@sunyixiang 同样可以使用,只要引用路径是以图片格式结尾的即可。
4楼 于 2010-8-29 20:00
不是图片格式结尾的
http://app.onlinephotofiler.com/images/A_1/4/1/5/135141/4894a79e14834ec591034d8a8e3deb83.1600×1200.jpg
5楼 于 2010-8-29 20:01
错了,应该是这个
http://app.onlinephotofiler.com/Img1/A_1/4/1/5/135141/07f02aa4dc424278b6860bdb1287469a.jpg?uid=206e6c06-7da6-49d2-ad0c-c800cfcf873e
于 2010-8-29 20:07
@sunyixiang 针对这种格式,你把jpg后面?的那一串去掉,就可以正常延迟加载了
6楼 于 2010-8-29 20:01
有的是,有的不是
7楼 于 2010-8-29 20:09
我QQ 491852803 热线求助
8楼 于 2010-10-12 14:44
我正好在折腾这玩意,没想到Google大神带我来你这了,用插见太傻,侧栏如果不划下去就不出图,怎样只加载评论和文章里的图片啊?
9楼 于 2010-10-12 17:05
哈哈自己搞定了··
于 2010-10-12 17:10
@玻璃柠檬 看了一下你刚发的文章,http://ireimu.net/362.html,觉得你可以将插件去除了,直接在源代码里面调用就行了
于 2010-10-14 08:34
@Qiankun 恩,回家就Ban掉他。
10楼 于 2010-10-30 04:36
为什么我把img改成#post img 之后还是无法实现文章部分的图片延迟加载? 只有代码是img的情况下才会出现延迟效果. 不过我想实现侧边栏不进行延迟显示.. 可是加了#post img就彻底没有延迟了… 求助.
于 2010-10-30 12:52
@逍遥
上面我举得#post img 只是一个例子,具体怎么设置还要要根据你博客源代码图片调用进行设置的。
同时这个延迟的代码,只是针对屏幕不可见区域的图片载入有延迟效果,如果你进入博客后,侧边栏的头像就在屏幕的可见区域,图片不会延迟加载的。
11楼 于 2011-1-30 09:53
感谢,按照乾坤的教程已经安装完毕,只是测试看不出效果….可能是浏览器已经有本地缓存了吧
于 2011-1-30 13:51
@edwin 是不是用了缓存插件,或者你强制刷新本地缓存试试~
于 2011-1-30 16:19
@Qiankun
测试成功,感谢分享,JS文件放到了主题里的JS文件夹,图片放到了主题里的images文件夹.
于 2011-1-31 11:13
@edwin 恭喜了~
12楼 于 2011-2-15 01:13
写的很详细,对小白很有用..
于 2011-2-15 01:56
@Jauia 大家都是从小白过来的!
13楼 于 2011-4-11 12:32
我想问一下,我只想一张图片不被延迟加载要怎么坐呢?
比如我想让http://img.baidu.com/guanggao.gif这张图片不被延迟加载!要怎样实现?
于 2011-4-13 15:19
@威武中国 俺也是Copy党,具体如何实现也是爱莫能助了!
于 2011-4-14 10:25
@QianKun
看来我还得想办法啊~不过还是谢谢你啊!
14楼 于 2011-4-24 21:35
在这里推荐插件jQuery Image Lazy Load WP
于 2011-4-25 00:46
@G字头老大 插件也不错,更简单~少了好多麻烦!
15楼 于 2011-8-11 08:55
于 2011-8-11 15:46
@恋月 有用就好~
16楼 于 2011-10-3 00:51
非常感谢,很有用。刚加了这个效果。
于 2011-10-15 10:39
@仰肖 对网页来说,效果还是不错的 ~
17楼 于 2011-11-8 10:33
很详细,拿走了~
于 2011-11-9 19:45
@贺昌 对图片多的网站,这东东还是有点儿用的~
18楼 于 2011-11-28 19:56
貌似我的还是有点问题 可否帮忙一下啊
于 2011-12-24 14:20
@xzymoe 不知是什么问题呢~很抱歉,现在才回~
19楼 于 2011-12-2 18:29
博主,我按你的方法操作了,但是火狐下面不支持,其他浏览器都支持,怎么回事呢?能给解决一下吗?
于 2011-12-24 14:20
@太原SEO 我用的就是FireFox,一切正常啊!是不是Firefox的什么插件把js过滤了?