LazyLoad.js及scrollLoading.js

news/2024/7/10 23:05:02 标签: fold, function, scroll, jquery, 浏览器, mozilla

 目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片);二是自动预加载(加载完首屏后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(&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


http://www.niftyadmin.cn/n/615119.html

相关文章

SSH Secure Shell Client中文乱码的解决办法

说这是SSH Secure Shell Client多年未解决的短板&#xff0c;要求客户端和服务器端都要‘UTF-8’编码&#xff0c;恩恩&#xff0c;这下我终于知道Windows中文版的编码居然是非UTF-8了。意思是我不换操作系统&#xff0c;就无法使用这个东东了&#xff1f; 于是乎&#xff0c;解…

crontabs使用

安装crontab: [rootCentOS ~]# yum install vixie-cron [rootCentOS ~]# yum install crontabs 说明&#xff1a; vixie-cron软件包是cron的主程序&#xff1b; crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。 // cron 是linux的内置服务&#…

汉诺塔问题(1)

View Code //************************************************** Description 问题的提出:约19世纪末&#xff0c;在欧州的商店中出售一种智力玩具&#xff0c;在一块铜板上有三根杆&#xff08;分别使A、B、C&#xff09;&#xff0c;最左边的杆上自上而下、由小到大顺序串…

删除Window下某个服务及Apache无服务

删除Window下某个服务&#xff0c;CMD进入命令行&#xff0c;执行sc delete 服务名&#xff0c;即可删除 例如&#xff1a; sc delete Apache2 --删除Apache2服务 如果Apache安装没有服务&#xff0c;进入Apache安装目录下的Bin下 Apache2.2版本“ httpd.exe -k install …

基本查询语句和方法,连表,子查询

基本查询语句及方法 from, where, group by, having, distinct, order by, limit 连表 inner join, left join, right join, union 书写顺序 select id,name from emp where id > 3 and id < 6; 执行顺序 from # 确定到底是哪张表 where # 根据过来条件 筛选数…

Spring Boot开发Web应用之JSP篇

前言 上一篇介绍了Spring Boot中使用Thymeleaf模板引擎&#xff0c;今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度有点大&#xff0c;但是玩起来还是蛮有意思的。 正文 先来看看整体的框架结构&#xff0c;跟前面介绍Thymeleaf的时候差不多&#xff0c;只是多了we…

Window下搭建SVN+Apache

1 软件下载&#xff1a; 在http://httpd.apache.org/download.cgi&#xff0c;下载&#xff1a; apache_2.2.14-win32-x86-openssl-0.9.8k.msi 在 http://subversion.tigris.org/&#xff0c;下载&#xff1a; Setup-Subversion-1.6.6.msi 在http://tortoisesvn.net/down…

并发编程-多线程

一.什么是线程 一条流水线的工作流程(程序中负责执行的东西叫做线程&#xff0c;或者叫进程内部的执行序列)&#xff0c;操作系统能够运算调度的最小单位。 进程是资源单位&#xff0c;线程是执行单位 二.线程和进程的区别 1.开启进程的开销非常大&#xff0c;比开启线程的开销…