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;
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(all_element[key]);
}
}
}
for
(
var
i
= 0,
len
= element_obj.length; i < len; i++) {
var
o_img
= element_obj[i];
var
t_index
= getAbsoluteTop(o_img);
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;
var
visio_offset
= offset + doc_element.clientHeight;
if
(last_offset
== visio_offset) {
setTimeout(initDownloadListen,
200);
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
}
})();