LazyLoad.js及scrollLoading.js延迟加载网页图片
目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片);二是自动预加载(加载完首屏后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文件实现真实延迟加载,本人比较懒,就直接在网上找了一个修改好的,嘿嘿
- /*
 - * 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;
 - //删除的代码
 
- /* 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("/js/lazyload/pixel.gif") no-repeat scroll center center transparent;" src="/js/lazyload/pixel.gif" style="WIDTH: 526px; HEIGHT: 293px" data-url="真实路径"/>
scrollLoading的实现相对而言比较麻烦一下
如果需要对应的JS包请去下载: