本文转自: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. //删除的代码
/*
* Lazy Load - jQuery plugin for lazy loading images
*
* Copyright (c) 2007-2009 Mika Tuupola
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Project home:
* http://www.appelsiini.net/projects/lazyload
*
* Version: 1.5.0
*
*/
(function ($) {
$.fn.lazyload = function (options) {
var settings = {
threshold: 0,
failurelimit: 0,
event: "scroll",
effect: "show",
container: window
};
if (options) {
$.extend(settings, options);
}
/* Fire one scroll event per scroll. Not one scroll event per image. */
var elements = this;
if ("scroll" == settings.event) {
$(settings.container).bind("scroll", function (event) {
var counter = 0;
elements.each(function () {
if ($.abovethetop(this, settings) ||
$.leftofbegin(this, settings)) {
/* Nothing. */
} else if (!$.belowthefold(this, settings) &&
!$.rightoffold(this, settings)) {
$(this).trigger("appear");
} else {
if (counter++ > settings.failurelimit) {
return false;
}
}
});
/* Remove image from array so it is not looped next time. */
var temp = $.grep(elements, function (element) {
return !element.loaded;
});
elements = $(temp);
});
}
this.each(function () {
var self = this;
//删除的代码
  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);
            /* When appear is triggered load original image. */
$(self).one("appear", function () {
if (!this.loaded) {
$("<img />")
.bind("load", function () {
$(self)
.hide()
.attr("src", $(self).attr("original"))
[settings.effect](settings.effectspeed);
self.loaded = true;
})
.attr("src", $(self).attr("original"));
};
});
/* When wanted event is triggered load original image */
/* by triggering appear. */
if ("scroll" != settings.event) {
$(self).bind(settings.event, function (event) {
if (!self.loaded) {
$(self).trigger("appear");
}
});
}
});
/* Force initial check if images should appear. */
$(settings.container).trigger(settings.event);
return this;
};
/* Convenience methods in jQuery namespace. */
/* Use as $.belowthefold(element, {threshold : 100, container : window}) */
$.belowthefold = function (element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).height() + $(window).scrollTop();
} else {
var fold = $(settings.container).offset().top + $(settings.container).height();
}
return fold <= $(element).offset().top - settings.threshold;
};
$.rightoffold = function (element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).width() + $(window).scrollLeft();
} else {
var fold = $(settings.container).offset().left + $(settings.container).width();
}
return fold <= $(element).offset().left - settings.threshold;
};
$.abovethetop = function (element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).scrollTop();
} else {
var fold = $(settings.container).offset().top;
}
return fold >= $(element).offset().top + settings.threshold + $(element).height();
};
$.leftofbegin = function (element, settings) {
if (settings.container === undefined || settings.container === window) {
var fold = $(window).scrollLeft();
} else {
var fold = $(settings.container).offset().left;
}
return fold >= $(element).offset().left + settings.threshold + $(element).width();
};
/* Custom selectors for your convenience. */
/* Use as $("img:below-the-fold").something() */
$.extend($.expr[':'], {
"below-the-fold": "$.belowthefold(a, {threshold : 0, container: window})",
"above-the-fold": "!$.belowthefold(a, {threshold : 0, container: window})",
"right-of-fold": "$.rightoffold(a, {threshold : 0, container: window})",
"left-of-fold": "!$.rightoffold(a, {threshold : 0, container: window})"
});
})(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. 小小c#算法题 - 9 - 基数排序 (Radix Sort)

    基数排序和前几篇博客中写到的排序方法完全不同.前面几种排序方法主要是通过关键字间的比较和移动记录这两种操作来实现排序的,而实现基数排序不需要进行记录项间的比较.而是把关键字按一定规则分布在不同的区域, ...

  2. Bugly集成指南

    官网: https://bugly.qq.com/v2/,用QQ扫码登录即可 1.创建应用,获取APPID 2.自动集成 2.1 在Module的build.gradle文件中添加依赖和属性配置: d ...

  3. jQuery+css实现tab功能

    点击我我会消失 Click me 点击按钮我会消失,再点击我会出现 演示tab tab1 tab2 tab3 [环球时报记者 郭芳] “中国秘密发射新快速响应火箭”,25日,在中国官方媒体报道我国“快 ...

  4. HTTP 协议 -- 浏览器缓存机制

    浏览器缓存机制 浏览器缓存机制主要是 HTTP 协议定义的缓存机制. HTTP 协议中有关缓存的缓存信息头的关键字有 Cache-Control,Pragma,Expires,Last-Modifie ...

  5. 【ionic App问题总结系列】ionic 如何更新app版本

    ionic 如何进行自动更新 ionic App更新有两种方式:第一种是普通的从远程下载apk,安装并覆盖旧版本.另外一种就是采用替换www文件夹的内容,实现应用内更新,而无需下载安装apk. 这篇文 ...

  6. P2498 [SDOI2012]拯救小云公主

    \(\color{#0066ff}{ 题目描述 }\) 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只bos ...

  7. 模板 Trie树

    模板 Trie树 code: #include <iostream> #include <cstdio> using namespace std; const int wx=2 ...

  8. 树的遍历顺序 - dfs序|欧拉序|dfn序(备忘)

    (仅作备忘) dfs序是dfs过程中对于某节点进入这个节点的子树和离开子树的顺序 满足每个节点都会在dfs序上出现恰好两次 任意子树的dfs序都是连续的 欧拉序是dfs过程中经过节点的顺序 每个节点至 ...

  9. luogu1210 回文检测

    Manacher 正确读法:抹内A撤(马拉车) (跟着假硕学英语) 我们把原来的字符串,通过玄学处理,变成只留下字母,且每两个字母之间有一个奇怪的字符的那种Manacher专用字符串. 建立双射关系f ...

  10. boost库checked_delete的使用

    在查看boost库时发现一个小文件checked_delete.hpp里面几个小函数,它的作用用很简短的话来说:防止未定义的行为造成delete时的内存泄露.实现如下: template<cla ...