手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >修改jquery.lazyload.js实现页面延迟载入
修改jquery.lazyload.js实现页面延迟载入
摘要:虽然实现了延迟载入的视觉效果,但是通过httpwatch等工具就可以看到,页面载入完毕后又发布很多空请求,而空请求就是由这些被替换过的img...

虽然实现了延迟载入的视觉效果,但是通过httpwatch等工具就可以看到,页面载入完毕后又发布很多空请求,而空请求就是由这些被替换过的img标签产生的,空请求也会一定程度上增加页面的打开时间,所以jquery.lazyload.js并未真生的实现页面延迟载入。

我对jquery.lazyload.js做了一些修改,实现了页面的延迟载入,不仅仅是图片,html代码同样可以延迟载入,大大减少了页面发出的请求数,提高了页面的打开速度。

修改后的jquery.lazyload.js代码如下:

jquery.lazyload.js

复制代码 代码如下:

/*

* 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

*

* Modify by @cnbaiying

* Modify time: 2010-12-16

*/

(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).parent(), settings) || $.leftofbegin($(this).parent(), settings)) {

/* Nothing. */

} else if (!$.belowthefold($(this).parent(), settings) && !$.rightoffold($(this).parent(), 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) {

//alert($(self).parent().html($(self).html()));

var tmp_str = $(self).html();

tmp_str = tmp_str.replace("<", "<");

tmp_str = tmp_str.replace(">", ">");

$(self).parent().append(tmp_str);

self.loaded = true;

}

});

/* 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);

下面是测试页面的html代码

复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="keywords" content="汽车图片,汽车图片壁纸, 汽车图片桌面, 汽车图片库,汽车图片大全" />

<meta name="description" content="汽车图片,网上车市汽车图片大全频道为网友提供各种汽车图片及美女图片下载,各种车型汽车图片桌面,汽车图片壁纸,车展美女图片,美女车模图片等。精彩图片,尽在网上车市。" />

<title>【汽车图片|汽车美女图片-汽车图片大全】-网上车市</title>

<style>

.switch_textarea {display:none;}

.div_style {width:600px; height:400px; }

</style>

<script type="text/javascript" src="jquery.1.4.4.js"></script>

<script type="text/javascript" src="lazyload.jquery.js"></script>

<script>

$().ready(function(){

$(".switch_textarea").lazyload();

});

</script>

</head>

<body>

<H2>第1张图</H2>

<div><textarea><img src="4bdfd2385fd03.jpg" /></textarea></div>

<H2>第2张图</H2>

<div><textarea><img src="4bdfd2366adec.jpg" /></textarea></div>

<H2>第3张图</H2>

<div><textarea><img src="4bdfd233b8da4.jpg" /></textarea></div>

<H2>第4张图</H2>

<div><textarea><img src="4bdfd231a0fd8.jpg" /></textarea></div>

<H2>第5张图</H2>

<div><textarea><img src="4bdfd22e68f56.jpg" /></textarea></div>

<H2>第6张图</H2>

<div><textarea><img src="4bdfd22c55a5d.jpg" /></textarea></div>

<H2>第7张图</H2>

<div><textarea><img src="4bdfd2278872b.jpg" /></textarea></div>

<H2>第8张图</H2>

<div><textarea><img src="4bdfd224a0f6e.jpg" /></textarea></div>

<H2>第9张图</H2>

<div><textarea><img src="4bdfd21fb42bc.jpg" /></textarea></div>

</body>

</html>

测试页面的html代码中将所有要载入的图片都放到了textarea标签中,其目的就是防止页面载入时这些img标签向服务器发出请求,从而实现减少不必要的请求数,实际应用中也可以将不需第一次载入的html代码放到textarea中。

【修改jquery.lazyload.js实现页面延迟载入】相关文章:

jQuery的Scrollify插件实现滑动到页面下一节点

jQuery插件pagewalkthrough实现引导页效果

jQuery实现转动随机数抽奖效果的方法

jQuery插件expander实现图片翻转特效

jQuery实现给页面换肤的方法

基于jQuery实现的无刷新表格分页实例

jQuery实现在列表的首行添加数据

jQuery+ajax实现无刷新级联菜单示例

js实现点击链接后延迟3秒再跳转的方法

Nodejs实现批量下载妹纸图

精品推荐
分类导航