<script type="text/javascript"> lazyLoad = (function () { var map_element = {};
var element_obj = [];
var download_count = 0;
var last_offset = -1;
var doc_body;
var doc_element;
var lazy_load_tag; function initVar(tags) { doc_body = document.body; //判断是否为IE的"怪异模式" doc_element = document.compatMode == 'BackCompat' ? doc_body : document.documentElement; lazy_load_tag = tags || ["img", "iframe"]; };
function initElementMap() { //var all_element = []; //从所有相关元素中找出需要延时加载的元素 for (var i = 0, len = lazy_load_tag.length; i < len; i++) { var el = document.getElementsByTagName(lazy_load_tag[i]); for (var j = 0, len2 = el.length; j < len2; j++) { if (typeof (el[j]) == "object" && el[j].getAttribute("lazy_src")) { element_obj.push(el[j]);
}
}
}
for (var i = 0, len = element_obj.length; i < len; i++) {
var o_img = element_obj[i];
var t_index = getAbsoluteTop(o_img); //得到图片相对document的距上距离
if (map_element[t_index]) {
map_element[t_index].push(i);
} else { //按距上距离保存一个队列
var t_array = [];
t_array[0] = i;
map_element[t_index] = t_array;
download_count++; //需要延时加载的图片数量
}
}
};
function initDownloadListen() {
if (!download_count) return;
var offset = (window.MessageEvent && !document.getBoxObjectFor) ? doc_body.scrollTop : doc_element.scrollTop; //可视化区域的高=offtset+document的高
var visio_offset = offset + doc_element.clientHeight;
if (last_offset == visio_offset) {
setTimeout(initDownloadListen, 200);//每隔0.2秒检测一次,这玩意儿感觉有些耗资源的
return;
}
last_offset = visio_offset;
var visio_height = doc_element.clientHeight;
var img_show_height = visio_height + offset; for (var key in map_element) { if (img_show_height > key) { var t_o = map_element[key]; var img_vl = t_o.length; for (var l = 0; l < img_vl; l++) { element_obj[t_o[l]].src = element_obj[t_o[l]].getAttribute("lazy_src"); } delete map_element[key]; download_count--; }
}
setTimeout(initDownloadListen, 200);
};
function getAbsoluteTop(element) {
if (arguments.length != 1 || element == null) {
return null;
}
var offsetTop = element.offsetTop;
while (element = element.offsetParent) { offsetTop += element.offsetTop;
}
return offsetTop;
}
function init(tags) { initVar(tags); initElementMap(); initDownloadListen(); };
return {
init: init
}
})(); </script>
上面是我在网上所找的一个关于页面图片延迟加载的代码,不过对其中
return {
init: init
}
这段代码的作用不知道是做什么的。提示是说如果在<body>最后面 用lazyLoad .init()方法调用就行了,可是
function init(tags) { initVar(tags); initElementMap(); initDownloadListen(); };
他有带有个tags参数,那么这个参数的值是从哪里来的?这种方法的调用直接lazyLoad.init();这有做什么解释?
var element_obj = [];
var download_count = 0;
var last_offset = -1;
var doc_body;
var doc_element;
var lazy_load_tag; function initVar(tags) { doc_body = document.body; //判断是否为IE的"怪异模式" doc_element = document.compatMode == 'BackCompat' ? doc_body : document.documentElement; lazy_load_tag = tags || ["img", "iframe"]; };
function initElementMap() { //var all_element = []; //从所有相关元素中找出需要延时加载的元素 for (var i = 0, len = lazy_load_tag.length; i < len; i++) { var el = document.getElementsByTagName(lazy_load_tag[i]); for (var j = 0, len2 = el.length; j < len2; j++) { if (typeof (el[j]) == "object" && el[j].getAttribute("lazy_src")) { element_obj.push(el[j]);
}
}
}
for (var i = 0, len = element_obj.length; i < len; i++) {
var o_img = element_obj[i];
var t_index = getAbsoluteTop(o_img); //得到图片相对document的距上距离
if (map_element[t_index]) {
map_element[t_index].push(i);
} else { //按距上距离保存一个队列
var t_array = [];
t_array[0] = i;
map_element[t_index] = t_array;
download_count++; //需要延时加载的图片数量
}
}
};
function initDownloadListen() {
if (!download_count) return;
var offset = (window.MessageEvent && !document.getBoxObjectFor) ? doc_body.scrollTop : doc_element.scrollTop; //可视化区域的高=offtset+document的高
var visio_offset = offset + doc_element.clientHeight;
if (last_offset == visio_offset) {
setTimeout(initDownloadListen, 200);//每隔0.2秒检测一次,这玩意儿感觉有些耗资源的
return;
}
last_offset = visio_offset;
var visio_height = doc_element.clientHeight;
var img_show_height = visio_height + offset; for (var key in map_element) { if (img_show_height > key) { var t_o = map_element[key]; var img_vl = t_o.length; for (var l = 0; l < img_vl; l++) { element_obj[t_o[l]].src = element_obj[t_o[l]].getAttribute("lazy_src"); } delete map_element[key]; download_count--; }
}
setTimeout(initDownloadListen, 200);
};
function getAbsoluteTop(element) {
if (arguments.length != 1 || element == null) {
return null;
}
var offsetTop = element.offsetTop;
while (element = element.offsetParent) { offsetTop += element.offsetTop;
}
return offsetTop;
}
function init(tags) { initVar(tags); initElementMap(); initDownloadListen(); };
return {
init: init
}
})(); </script>
上面是我在网上所找的一个关于页面图片延迟加载的代码,不过对其中
return {
init: init
}
这段代码的作用不知道是做什么的。提示是说如果在<body>最后面 用lazyLoad .init()方法调用就行了,可是
function init(tags) { initVar(tags); initElementMap(); initDownloadListen(); };
他有带有个tags参数,那么这个参数的值是从哪里来的?这种方法的调用直接lazyLoad.init();这有做什么解释?
doc_body = document.body;
//判断是否为IE的"怪异模式"
doc_element = document.compatMode == 'BackCompat' ? doc_body : document.documentElement;
lazy_load_tag = tags || ["img", "iframe"];//如果tags为undfined的时候会有默认的参数["img", "iframe"]
};lazyLoad.init();所以这里的tags可以不传,用默认参数["img", "iframe"],这个方法主要是完成初始化操作
return {
init: init
}
如果我想把上面的代码改成用var lazyLoad=function(){}
lazyLoad.prototype={}
这样的代码应该改什么?
调用的话直接 var lazy=new lazyLoad() 调用吗?不是应该怎么调用?
上面原代码中lazyLoad.init();是个什么意思?
望有人解答