本文转自:http://blog.csdn.net/ning109314/article/details/7042829

目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片);二是自动预加载(加载完首屏后n秒后自动加载其他位置的图片)。现在最流行使用的就是LazyLoad.js及scrollLoading.js这两个用Jquery写的小插件。

一、LazyLoad实现:

<script type="text/javascript" src="/js/lazyload/jquery.min.js"></script> < script type="text/javascript" src="/js/lazyload/lazyload.js"></script> < script type="text/javascript"> jQuery(document).ready( function($){ $("img").lazyload({ effect : "fadeIn" }); }); < /script>

网上找到一个更好点的处理方式,以下方式转自http://www.poluoluo.com/jzxy/201110/145261.html

<script type="text/javascript">

//首先用JQ判断浏览器类型及版本,如果是IE8以下的浏览器就用effect=show,否则就用effect=fadeIn,判断浏览器版本函数如下 function checkbrowse() { var ua = navigator.userAgent.toLowerCase(); var is = (ua.match(/\b(chrome|opera|safari|msie|firefox)\b/) || ['', 'mozilla'])[1]; var r = '(?:' + is + '|version)[\\/: ]([\\d.]+)'; var v = (ua.match(new RegExp(r)) || [])[1]; jQuery.browser.is = is; jQuery.browser.ver = v; return { 'is': jQuery.browser.is, 'ver': jQuery.browser.ver } }

//改造Jquery.LazyLoad.js函数,根据浏览器版本来显示不同的滤镜效果 var public = checkbrowse(); var showeffect = ""; if ((public['is'] == 'msie' && public['ver'] < 8.0)) { showeffect = "show" } else { showeffect = "fadeIn" } jQuery(document).ready(function($) { $("img").lazyload({ placeholder: "http://demo.jb51.net/js/2011/lazyload/Js/lazyload/grey.gif", effect: showeffect, failurelimit: 10 }) }); < /script>

html:

<img    src="/js/lazyload/pixel.gif" original="真实图片路径" />

而LazyLoad只是给你一个延迟加载的假象,每次图片都会加载两次,完全就是一个假象的延迟加载。可以修改LazyLoad文件实现真实延迟加载,本人比较懒,就直接在网上找了一个修改好的,嘿嘿

  1. /*
  2. * Lazy Load - jQuery plugin for lazy loading images
  3. *
  4. * Copyright (c) 2007-2009 Mika Tuupola
  5. *
  6. * Licensed under the MIT license:
  7. *   http://www.opensource.org/licenses/mit-license.php
  8. *
  9. * Project home:
  10. *   http://www.appelsiini.net/projects/lazyload
  11. *
  12. * Version:  1.5.0
  13. *
  14. */
  15. (function ($) {
  16. $.fn.lazyload = function (options) {
  17. var settings = {
  18. threshold: 0,
  19. failurelimit: 0,
  20. event: "scroll",
  21. effect: "show",
  22. container: window
  23. };
  24. if (options) {
  25. $.extend(settings, options);
  26. }
  27. /* Fire one scroll event per scroll. Not one scroll event per image. */
  28. var elements = this;
  29. if ("scroll" == settings.event) {
  30. $(settings.container).bind("scroll", function (event) {
  31. var counter = 0;
  32. elements.each(function () {
  33. if ($.abovethetop(this, settings) ||
  34. $.leftofbegin(this, settings)) {
  35. /* Nothing. */
  36. } else if (!$.belowthefold(this, settings) &&
  37. !$.rightoffold(this, settings)) {
  38. $(this).trigger("appear");
  39. } else {
  40. if (counter++ > settings.failurelimit) {
  41. return false;
  42. }
  43. }
  44. });
  45. /* Remove image from array so it is not looped next time. */
  46. var temp = $.grep(elements, function (element) {
  47. return !element.loaded;
  48. });
  49. elements = $(temp);
  50. });
  51. }
  52. this.each(function () {
  53. var self = this;
  54. //删除的代码
  1. /*
  2. * Lazy Load - jQuery plugin for lazy loading images
  3. *
  4. * Copyright (c) 2007-2009 Mika Tuupola
  5. *
  6. * Licensed under the MIT license:
  7. * http://www.opensource.org/licenses/mit-license.php
  8. *
  9. * Project home:
  10. * http://www.appelsiini.net/projects/lazyload
  11. *
  12. * Version: 1.5.0
  13. *
  14. */
  15. (function ($) {
  16. $.fn.lazyload = function (options) {
  17. var settings = {
  18. threshold: 0,
  19. failurelimit: 0,
  20. event: "scroll",
  21. effect: "show",
  22. container: window
  23. };
  24. if (options) {
  25. $.extend(settings, options);
  26. }
  27. /* Fire one scroll event per scroll. Not one scroll event per image. */
  28. var elements = this;
  29. if ("scroll" == settings.event) {
  30. $(settings.container).bind("scroll", function (event) {
  31. var counter = 0;
  32. elements.each(function () {
  33. if ($.abovethetop(this, settings) ||
  34. $.leftofbegin(this, settings)) {
  35. /* Nothing. */
  36. } else if (!$.belowthefold(this, settings) &&
  37. !$.rightoffold(this, settings)) {
  38. $(this).trigger("appear");
  39. } else {
  40. if (counter++ > settings.failurelimit) {
  41. return false;
  42. }
  43. }
  44. });
  45. /* Remove image from array so it is not looped next time. */
  46. var temp = $.grep(elements, function (element) {
  47. return !element.loaded;
  48. });
  49. elements = $(temp);
  50. });
  51. }
  52. this.each(function () {
  53. var self = this;
  54. //删除的代码
  1. /* When appear is triggered load original image. */
  2. $(self).one("appear", function () {
  3. if (!this.loaded) {
  4. $("<img />")
  5. .bind("load", function () {
  6. $(self)
  7. .hide()
  8. .attr("src", $(self).attr("original"))
  9. [settings.effect](settings.effectspeed);
  10. self.loaded = true;
  11. })
  12. .attr("src", $(self).attr("original"));
  13. };
  14. });
  15. /* When wanted event is triggered load original image */
  16. /* by triggering appear.                              */
  17. if ("scroll" != settings.event) {
  18. $(self).bind(settings.event, function (event) {
  19. if (!self.loaded) {
  20. $(self).trigger("appear");
  21. }
  22. });
  23. }
  24. });
  25. /* Force initial check if images should appear. */
  26. $(settings.container).trigger(settings.event);
  27. return this;
  28. };
  29. /* Convenience methods in jQuery namespace.           */
  30. /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */
  31. $.belowthefold = function (element, settings) {
  32. if (settings.container === undefined || settings.container === window) {
  33. var fold = $(window).height() + $(window).scrollTop();
  34. } else {
  35. var fold = $(settings.container).offset().top + $(settings.container).height();
  36. }
  37. return fold <= $(element).offset().top - settings.threshold;
  38. };
  39. $.rightoffold = function (element, settings) {
  40. if (settings.container === undefined || settings.container === window) {
  41. var fold = $(window).width() + $(window).scrollLeft();
  42. } else {
  43. var fold = $(settings.container).offset().left + $(settings.container).width();
  44. }
  45. return fold <= $(element).offset().left - settings.threshold;
  46. };
  47. $.abovethetop = function (element, settings) {
  48. if (settings.container === undefined || settings.container === window) {
  49. var fold = $(window).scrollTop();
  50. } else {
  51. var fold = $(settings.container).offset().top;
  52. }
  53. return fold >= $(element).offset().top + settings.threshold + $(element).height();
  54. };
  55. $.leftofbegin = function (element, settings) {
  56. if (settings.container === undefined || settings.container === window) {
  57. var fold = $(window).scrollLeft();
  58. } else {
  59. var fold = $(settings.container).offset().left;
  60. }
  61. return fold >= $(element).offset().left + settings.threshold + $(element).width();
  62. };
  63. /* Custom selectors for your convenience.   */
  64. /* Use as $("img:below-the-fold").something() */
  65. $.extend($.expr[':'], {
  66. "below-the-fold": "$.belowthefold(a, {threshold : 0, container: window})",
  67. "above-the-fold": "!$.belowthefold(a, {threshold : 0, container: window})",
  68. "right-of-fold": "$.rightoffold(a, {threshold : 0, container: window})",
  69. "left-of-fold": "!$.rightoffold(a, {threshold : 0, container: window})"
  70. });
  71. })(jQuery);
  1. /* When appear is triggered load original image. */
  2. $(self).one("appear", function () {
  3. if (!this.loaded) {
  4. $("<img />")
  5. .bind("load", function () {
  6. $(self)
  7. .hide()
  8. .attr("src", $(self).attr("original"))
  9. [settings.effect](settings.effectspeed);
  10. self.loaded = true;
  11. })
  12. .attr("src", $(self).attr("original"));
  13. };
  14. });
  15. /* When wanted event is triggered load original image */
  16. /* by triggering appear. */
  17. if ("scroll" != settings.event) {
  18. $(self).bind(settings.event, function (event) {
  19. if (!self.loaded) {
  20. $(self).trigger("appear");
  21. }
  22. });
  23. }
  24. });
  25. /* Force initial check if images should appear. */
  26. $(settings.container).trigger(settings.event);
  27. return this;
  28. };
  29. /* Convenience methods in jQuery namespace. */
  30. /* Use as $.belowthefold(element, {threshold : 100, container : window}) */
  31. $.belowthefold = function (element, settings) {
  32. if (settings.container === undefined || settings.container === window) {
  33. var fold = $(window).height() + $(window).scrollTop();
  34. } else {
  35. var fold = $(settings.container).offset().top + $(settings.container).height();
  36. }
  37. return fold <= $(element).offset().top - settings.threshold;
  38. };
  39. $.rightoffold = function (element, settings) {
  40. if (settings.container === undefined || settings.container === window) {
  41. var fold = $(window).width() + $(window).scrollLeft();
  42. } else {
  43. var fold = $(settings.container).offset().left + $(settings.container).width();
  44. }
  45. return fold <= $(element).offset().left - settings.threshold;
  46. };
  47. $.abovethetop = function (element, settings) {
  48. if (settings.container === undefined || settings.container === window) {
  49. var fold = $(window).scrollTop();
  50. } else {
  51. var fold = $(settings.container).offset().top;
  52. }
  53. return fold >= $(element).offset().top + settings.threshold + $(element).height();
  54. };
  55. $.leftofbegin = function (element, settings) {
  56. if (settings.container === undefined || settings.container === window) {
  57. var fold = $(window).scrollLeft();
  58. } else {
  59. var fold = $(settings.container).offset().left;
  60. }
  61. return fold >= $(element).offset().left + settings.threshold + $(element).width();
  62. };
  63. /* Custom selectors for your convenience. */
  64. /* Use as $("img:below-the-fold").something() */
  65. $.extend($.expr[':'], {
  66. "below-the-fold": "$.belowthefold(a, {threshold : 0, container: window})",
  67. "above-the-fold": "!$.belowthefold(a, {threshold : 0, container: window})",
  68. "right-of-fold": "$.rightoffold(a, {threshold : 0, container: window})",
  69. "left-of-fold": "!$.rightoffold(a, {threshold : 0, container: window})"
  70. });
  71. })(jQuery);

二、scrollLoading实现

<script src="/js/lazyload/jquery.scrollLoading.js" type="text/javascript"></script><script type="text/javascript" src="/js/lazyload//jquery_002.js"></script> < script type="text/javascript" src="/js/lazyload//jquery.js"></script> < script> $(function() {  $(".scrollLoading").scrollLoading();  }); < /script>

HTML:

<img class="scrollLoading" style="background: url(&quot;/js/lazyload/pixel.gif&quot;) no-repeat scroll center center transparent;" src="/js/lazyload/pixel.gif" style="WIDTH: 526px; HEIGHT: 293px" data-url="真实路径"/>

scrollLoading的实现相对而言比较麻烦一下

如果需要对应的JS包请去下载:

http://download.csdn.net/detail/ning109314/3882760

[转]LazyLoad.js及scrollLoading.js的更多相关文章

  1. LazyLoad.js及scrollLoading.js

    http://blog.csdn.net/ning109314/article/details/7042829 目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片):二是自动预加载(加 ...

  2. 插件:★★★ !!!图片懒加载 lazyload.js 、 jquery.scrollLoading.js

    插件:图片懒加载 jquery.lazyload.js 2016-3-31 插件说明:http://www.w3cways.com/1765.html (小插件,好用) 下载地址: https://r ...

  3. 两种图片延迟加载的方法总结jquery.scrollLoading.js与jquery.lazyload.js

    估计网上能查到的最多的两种图片延迟加载方法就是jquery.scrollLoading.js与jquery.lazyload.js了,其中jquery.lazyload.js的调用方法因为有网友爆出的 ...

  4. 两种图片延迟加载的方法总结jquery.scrollLoading.js与jquery.lazyload.js---转载

    jquery.scrollLoading方法 html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml& ...

  5. 图片延迟加载scrollLoading.js应用

     <ul>                     <li><a href="http://news.qq.com/" target="_b ...

  6. 页面滚动图片等元素动态加载插件jquery.scrollLoading.js

    如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的 ...

  7. jq:jQuery库文件jquery.scrollLoading.js使用方法

    图片延迟加载,滚动到哪里加载到哪里: 1:头部加载库文件 <script type="text/javascript" src="/js/jquery.scroll ...

  8. 记录:sea.js和require.js配置 与 性能对比

    最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放 ...

  9. MVC、MVP、MVVM、Angular.js、Knockout.js、Backbone.js、React.js、Ember.js、Avalon.js、Vue.js 概念摘录

    注:文章内容都是摘录性文字,自己阅读的一些笔记,方便日后查看. MVC MVC(Model-View-Controller),M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是 ...

随机推荐

  1. [译]Javascript数列的push和pop方法

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  2. Web性能权威指南 PDF扫描版​

    Web性能权威指南是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物.<Web性能权威指南>目标是涵盖Web开发者技术体系中应该掌握的所有网络及性能优化知识.全书 ...

  3. winform GDI基础(二)画带圆角的矩形框

    private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.SmoothingMode ...

  4. Insus Paging Utility Version 2

    Insus.NET对GridView或是DataList分页,都是使用自己的分页组件:http://www.cnblogs.com/insus/archive/2009/03/19/1417102.h ...

  5. 个人JS体系整理(二)

    一. eval eval()函数计算JavaScript字符串,并把它作为脚本代码来执行.如果参数是一个表达式,eval()函数将执行表达式.如果参数是Javascript语句,eval()将执行Ja ...

  6. Python3中集合的混合使用

    比较简单没什么好说的: list_1 = [1,2,3,4,6,3,2,5,7,8,2,1] list_1 = set(list_1) list_1.add(999) list_2 = set([2, ...

  7. Spring MVC零配置(全注解)(版本5.0.7)

    // 核心配置类 package spittr.config; import org.springframework.web.servlet.support.AbstractAnnotationCon ...

  8. 魔法少女 LJJ——线段树

    题目 [题目描述] 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女 LJJ 已经觉得自己见过世界上的所有稀奇古怪的事情了. LJJ 感叹道“这里真是个迷人的绿色世界,空气清新.淡雅,到处 ...

  9. ios swift UITextView高度自适应

    在ios开发中,用到多行输入时一般都会用到UITextView.常见的比如说聊天输入框,评论输入框等,当用户输入多内容时,我们希望高度能根据用户输入的内容扩大而扩大.其实实现这个功能也不是很难,只需要 ...

  10. P3272 [SCOI2011]地板

    \(\color{#0066ff}{ 题目描述 }\) lxhgww的小名叫"小L",这是因为他总是很喜欢L型的东西.小L家的客厅是一个R*C的矩形,现在他想用L型的地板来铺满整个 ...