现在的位置: 首页Web前端>正文
jQuery实现图片延迟加载
2010年03月04日 Web前端 评论数 23 ⁄ 被围观 17,970+

在浏览有些网站时,发现图片是在下拉滚动条时才加载,这是一个很不错的用户体验。这一效果是通过JavaScript 编写的 jQuery 插件实现的,它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的.在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担. 有些WordPress主题也具备了此功能。

目前我用的这个热点新闻主题由于有缩略图功能所以也试着加上看看效果如何。这里把这一功能应用到WordPress主题方法说一下,其实很简单,首先下载jquery.lazyloa.js,放到主题目录中,然后在header.php模板文件</head>标签前添加如下代码:

  1. <script type="text/javascript" src="<?php bloginfo('template_directory');?>/js/jquery.lazyload.js"></script>
  2. <script type="text/javascript">
  3. $(function() {
  4. $("img").lazyload({
  5. effect : "fadeIn"
  6. });
  7. });
  8. </script>

其中img是延迟加载所有图片,也可以根据不同模板作相应改动,比如我这个主题,可以改成#post img,这样只延迟加载#post 容器内的图片,否则可能影响到侧边图片的加载,主要是留言者头像可能会最后加载;

fadeIn是图片显示效果

这样基本就可以了!

如果上面的功能可能没有达到你的要求,还有几个选项可供设置。

可以设置阀值来控制 灵敏度

  1. $(“img”).lazyload({ threshold : 200 });  

把阀值设置成200 意思就是当图片没有看到之前先load 200像素。当然了你也可以通过设置占位符图片和自定事件来触发加载图片事件

  1. $("img").lazyload({   
  2. placeholder : "img/grey.gif",   
  3. event : "click"  
  4. });  

还可以通过定义effect 参数来定义一些图片显示效果

  1. $("img").lazyload({   
  2. placeholder : "img/grey.gif",   
  3. effect : "fadeIn"  
  4. });  

事件触发加载,事件可以是任何 jQuery 时间, 如: click 和 mouseover. 你还可以使用自定义的事件, 如: sporty 和 foobar. 默认情况下处于等待状态, 直到用户滚动到窗口上图片所在位置. 在灰色占位图片被点击之前阻止加载图片, 你可以这样做:

  1. $("img").lazyload({   
  2. placeholder : "img/grey.gif",   
  3. event : "click"  
  4. });  

延迟加载图片,Lazy Load 插件的一个不完整的功能, 但是这也能用来实现图片的延迟加载. 下面的代码实现了页面加载完成后再加载. 页面加载完成 5 秒后, 指定区域内的图片会自动进行加载.

  1. $(function() {   
  2. $("img:below-the-fold").lazyload({   
  3. placeholder : "img/grey.gif",   
  4. event : "sporty"  
  5. });   
  6. });   
  7. $(window).bind("load"function() {   
  8. var timeout = setTimeout(function() {$("img").trigger("sporty")}, 5000);   
  9. });  

图片在容器里面你可以将插件用在可滚动容器的图片上, 例如带滚动条的 DIV 元素. 你要做的只是将容器定义为 jQuery 对象并作为参数传到初始化方法里面.

CSS

  1. #container {   
  2. height600px;   
  3. overflowscroll;   
  4. }  

JavaScript 代码:

  1. $("img").lazyload({   
  2. placeholder : "img/grey.gif",   
  3. container: $("#container")   
  4. });  

当图片不顺序排列,滚动页面的时候, Lazy Load 会循环为加载的图片. 在循环中检测图片是否在可视区域内. 默认情况下在找到第一张不在可见区域的图片时停止循环. 图片被认为是流式分布的, 图片在页面中的次序和 HTML 代码中次序相同. 但是在一些布局中, 这样的假设是不成立的. 不过你可以通过 failurelimit 选项来控制加载行为.

  1. $("img").lazyload({   
  2. failurelimit : 10   
  3. });  

下载地址: source, minified or packed

目前有 23 条留言 其中:访客:22 条, 博主:1 条

  1. 朵未 : 2010年06月20日 594 天前 00:11:06  1楼 @回复 回复

    这个效果不错。收藏先。

  2. Joe : 2010年10月05日 487 天前 10:58:41  2楼 @回复 回复

    我决定试试看。

  3. ZCMHI : 2010年10月28日 464 天前 14:01:36  3楼 @回复 回复

    看起来很好,下载了用用!

  4. svcoo : 2011年01月18日 382 天前 09:39:26  4楼 @回复 回复

    如果碰到有些加载地址不存在的时候,会不会卡在那好长时间?而不加载后面的东西

  5. 免费宝贝描述模板 : 2011年04月27日 283 天前 16:30:49  5楼 @回复 回复

    不错,支持下

  6. 约定 : 2011年05月01日 279 天前 20:12:50  6楼 @回复 回复

    jquery.lazyload.js下载不了呀

  7. vcdgf : 2011年07月23日 196 天前 11:49:11  7楼 @回复 回复

    这个不对吧 感觉是图片全部下载完了 才出了这样一个加载的效果啊

  8. 苏打粉 : 2011年08月24日 164 天前 15:44:15  8楼 @回复 回复

    不知为何在本地测试完美,但在服务器上却认不出lazyload函数。

  9. dx22120 : 2011年08月25日 163 天前 08:41:30  9楼 @回复 回复

    下载jquery.lazyloa.js 不到

  10. dx22120 : 2011年08月25日 163 天前 09:59:07  10楼 @回复 回复

    放到5张的图片滚动里面 前面三张可以显示图片 后面2张 无法显示图片。
    123.jpg
    请问如何解决呢?

    img是否可以更换的css样式?

    • dx22120 : 2011年08月25日 163 天前 10:06:38 @回复 回复

      问题已经解决谢谢了!

  11. 无忧桌球 : 2011年09月06日 151 天前 17:10:00  11楼 @回复 回复

    学习了,并且把方法推荐给了别人

  12. hnxn_zq : 2011年10月10日 117 天前 09:14:27  12楼 @回复 回复

    很好,收藏了。

  13. mei : 2011年10月11日 116 天前 15:08:09  13楼 @回复 回复

    还是不会用。。。

  14. 微小说 : 2011年10月31日 96 天前 15:14:01  14楼 @回复 回复

    这个怎么用呢?具体什么样实现?

  15. Cyan : 2011年11月06日 90 天前 22:21:06  15楼 @回复 回复

    我按照以上方法改好了,不过好像没有特别的效果。

  16. duola : 2011年11月16日 80 天前 22:28:03  16楼 @回复 回复

    我感觉像我图片比较少的博客,就不需要这个了,否则为了实现几张图片的延迟载入,还得引入一个巨大的js,得不偿失啊。

  17. im : 2011年12月06日 60 天前 14:04:25  17楼 @回复 回复

    你的placeholder 从哪里来的 ?

  18. im : 2011年12月06日 60 天前 14:04:53  18楼 @回复 回复

    莫名其妙的 settings.placeholder ?

  19. jaclon : 2011年12月16日 50 天前 13:52:15  19楼 @回复 回复

    一般页面比较长的才用的到

  20. yao : 2012年01月13日 22 天前 15:47:32  20楼 @回复 回复

    为什么幻灯片只能加载2张,第3张开始就不显示了??

  21. meilailacom : 2012年01月17日 18 天前 11:22:46  21楼 @回复 回复

    这是我想要找的,正好要用,谢谢分享

Wopus问答

给我留言

留言无头像?

留言不能超过1500字,已输入字数:

×
腾讯微博