延时加载图片(优化版)
2010-07-12 10:47
363 查看
在上一篇文章(http://www.cnblogs.com/windinsky/archive/2010/07/09/1774354.html)中,探讨了一下页面图片延时加载的方法,今天重新看了一遍代码,发现其实不必写的那么麻烦,也用不到数组,做了一下修改,精简了一些无用的代码。
延时加载原理:
1、将需要延时加载的图片的src属性去除,新添一个自定义的属性如lazyload,将图片路径存于lazyload属性中。如下
2、Js预加载第一张图片,将lazyload的值赋予img的src属性,并移除lazyload属性。如下
3、为window对象添加scroll(页面滚动)事件,每次触发事件时,计算目前页面中第一张需要延时加载图片的位置是否在可视区域,若在可视区域,将lazyload的值赋予img的src属性,并移除lazyload属性。
以下是经过优化的代码
///<reference path="jquery-1.4.1-vsdoc.js" />
var lazyLoad = {
/// <summary>
/// img标签中的存放图片路径的自定义属性名称
/// </summary>
AttributeName: "lazyload",
/// <summary>
/// 初始化。自动加载第一张图片。
/// </summary>
Init: function (v) {
if (v != undefined && v != null && typeof (v) == "string") {
this.AttributeName = v;
}
if ($("img[" + this.AttributeName + "]").size() > 0) {
var src = $("img[" + this.AttributeName + "]").eq(0).attr(this.AttributeName);
$("img[" + this.AttributeName + "]").eq(0).attr("src", src);
$("img[" + this.AttributeName + "]").eq(0).removeAttr(this.AttributeName);
}
},
/// <summary>
/// 当scroll事件被触发时,进行加载图片的操作
/// </summary>
LoadImage: function (scrolltop) {
//获取目前第一张需延迟加载的图片,无图片的话就终止
var currentObj = null;
if ($("img[" + this.AttributeName + "]").size() > 0) {
currentObj = $("img[" + this.AttributeName + "]").eq(0);
}
else {
return false;
}
//获取窗体的高度
var windowHeight = $(window).height();
//获取当前图片相对于页面顶部的偏移量
var _scrollTop = currentObj.offset().top - windowHeight + currentObj.height();
//根据scrollTop判断是否显示图片
if (parseInt(scrolltop) >= parseInt(_scrollTop)) {
var src = currentObj.attr(this.AttributeName);
currentObj.attr("src", src);
currentObj.removeAttr(this.AttributeName);
}
},
/// <summary>
/// 启动延时加载
/// <params key="v">img标签中的存放图片路径的自定义属性名称</params>
/// </summary>
Run: function (v) {
this.Init(v);
var _this = this;
if ($("img[" + this.AttributeName + "]").size() > 0) {
$(window).bind("scroll", function () {
_this.LoadImage($(this).scrollTop());
});
}
}
};
有兴趣的朋友按上篇文章的方法用firebug测测,效果依旧!
延时加载原理:
1、将需要延时加载的图片的src属性去除,新添一个自定义的属性如lazyload,将图片路径存于lazyload属性中。如下
<img lazyload="img/bmw_m1_hood.jpg?1277878639" /> |
<img src="img/bmw_m1_hood.jpg?1277878639" /> |
以下是经过优化的代码
///<reference path="jquery-1.4.1-vsdoc.js" />
var lazyLoad = {
/// <summary>
/// img标签中的存放图片路径的自定义属性名称
/// </summary>
AttributeName: "lazyload",
/// <summary>
/// 初始化。自动加载第一张图片。
/// </summary>
Init: function (v) {
if (v != undefined && v != null && typeof (v) == "string") {
this.AttributeName = v;
}
if ($("img[" + this.AttributeName + "]").size() > 0) {
var src = $("img[" + this.AttributeName + "]").eq(0).attr(this.AttributeName);
$("img[" + this.AttributeName + "]").eq(0).attr("src", src);
$("img[" + this.AttributeName + "]").eq(0).removeAttr(this.AttributeName);
}
},
/// <summary>
/// 当scroll事件被触发时,进行加载图片的操作
/// </summary>
LoadImage: function (scrolltop) {
//获取目前第一张需延迟加载的图片,无图片的话就终止
var currentObj = null;
if ($("img[" + this.AttributeName + "]").size() > 0) {
currentObj = $("img[" + this.AttributeName + "]").eq(0);
}
else {
return false;
}
//获取窗体的高度
var windowHeight = $(window).height();
//获取当前图片相对于页面顶部的偏移量
var _scrollTop = currentObj.offset().top - windowHeight + currentObj.height();
//根据scrollTop判断是否显示图片
if (parseInt(scrolltop) >= parseInt(_scrollTop)) {
var src = currentObj.attr(this.AttributeName);
currentObj.attr("src", src);
currentObj.removeAttr(this.AttributeName);
}
},
/// <summary>
/// 启动延时加载
/// <params key="v">img标签中的存放图片路径的自定义属性名称</params>
/// </summary>
Run: function (v) {
this.Init(v);
var _this = this;
if ($("img[" + this.AttributeName + "]").size() > 0) {
$(window).bind("scroll", function () {
_this.LoadImage($(this).scrollTop());
});
}
}
};
有兴趣的朋友按上篇文章的方法用firebug测测,效果依旧!
相关文章推荐
- 网页前端优化之滚动延时加载图片示例
- 网页前端优化之滚动延时加载图片
- ionic入门教程第十五课-ionic性能优化之图片延时加载
- 自己动手,写自己的lazyload,让插件凉快去——网站优化之图片延时加载
- 网页前端优化之滚动延时加载图片
- ionic入门教程第十五课-ionic性能优化之图片延时加载
- 网页前端优化之滚动延时加载图片示例
- 网页前端优化之滚动延时加载图片示例
- listview异步图片加载之优化篇(android)
- Android ViewPager与Fragment的延时切换,取消预加载优化
- 图片延时加载例子详解
- jquery插件图片延时加载实例详解
- iOS开发中如何解决TableView中图片延时加载
- web资源优化之图片加载的时机
- js实现网页图片延时加载的原理和代码 提高网站打开速度
- 关于TableView中图片的延时加载
- LruCache和DiskLruCache优化网络异步加载图片
- 实现页面图片的延时异步加载
- Jquery实现图片的预加载与延时加载
- android 图片加载优化,避免oom问题产生