原生Js页面滚动延迟加载图片 - dtdxrk

原帖地址:http://www.cnblogs.com/dtdxrk/p/3151001.html

原理和过程
1.页面滚动加载事件
2.获取元素在页面里的top值 根据滚动条的位置 判断何时显示图片
3.获取元素集合 加载过的图片从集合里删除

效果预览:http://jsfiddle.net/dtdxrk/SkYNq/embedded/result/

1 <! DOCTYPE html >
2 < html >
3 < head >
4 < meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
5 < title >原生Js页面滚动延迟加载图片 </ title >
6 < style type ="text/css" >
7 * { margin : 0 ; padding : 0 }
8 img.scrollLoading { border : 1px solid #ccc ; display : block ; margin-top : 10px ; }
9 </ style >
10 </ head >
11 < body >
12
13 < div id ="content" ></ div >
14
15 </ body >
16 </ html >
17
18 < script type ="text/javascript" >
19 var _CalF = {
20 $ : function (object){ // 选择器
21 if (object === undefined ) return ;
22 var getArr = function (name,tagName,attr){
23 var tagName = tagName || ' * ' ,
24 eles = document.getElementsByTagName(tagName),
25 clas = ( typeof document.body.style.maxHeight === " undefined " ) ? " className " : " class " ; // ie6
26 attr = attr || clas,
27 Arr = [];
28 for ( var i = 0 ;i < eles.length;i ++ ){
29 if (eles[i].getAttribute(attr) == name){
30 Arr.push(eles[i]);
31 }
32 }
33 return Arr;
34 };
35
36 if (object.indexOf( ' # ' ) === 0 ){ // #id
37 return document.getElementById(object.substring( 1 ));
38 } else if (object.indexOf( ' . ' ) === 0 ){ // .class
39 return getArr(object.substring( 1 ));
40 } else if (object.match( / = / g)){ // attr=name
41 return getArr(object.substring(object.search( / = / g) + 1 ), null ,object.substring( 0 ,object.search( / = / g)));
42 } else if (object.match( / . / g)){ // tagName.className
43 return getArr(object.split( ' . ' )[ 1 ],object.split( ' . ' )[ 0 ]);
44 }
45 },
46 getPosition : function (obj) { // 获取元素在页面里的位置和宽高
47 var top = 0 ,
48 left = 0 ,
49 width = obj.offsetWidth,
50 height = obj.offsetHeight;
51
52 while (obj.offsetParent){
53 top += obj.offsetTop;
54 left += obj.offsetLeft;
55 obj = obj.offsetParent;
56 }
57
58 return { " top " :top, " left " :left, " width " :width, " height " :height};
59 }
60 };
61
62
63 // 添加图片list
64 var _temp = [];
65 for ( var i = 1 ; i < 21 ; i ++ ) {
66 _temp.push( ' <img class="scrollLoading" data-src="http://images.cnblogs.com/cnblogs_com/Darren_code/311197/o_ ' + i + ' .jpg" src="loading.gif" /><br />图片 ' + i);
67 }
68 _CalF.$( " #content " ).innerHTML = _temp.join( "" );
69
70
71 function scrollLoad(){
72 this .init.apply( this , arguments);
73 }
74
75 scrollLoad.prototype = {
76 init : function (className){
77 var className = " img. " + className,
78 imgs = _CalF.$(className),
79 that = this ;
80 this .imgs = imgs;
81 that.loadImg();
82 window.onscroll = function (){
83 that.time = setTimeout( function (){
84 that.loadImg();
85 }, 400 );
86 }
87 },
88 loadImg : function (){
89 var imgs = this .imgs.reverse(), // 获取数组翻转
90 len = imgs.length;
91
92 if (imgs.length === 0 ){
93 clearTimeout( this .time);
94 return ;
95 }
96 for ( var j = len - 1 ;j >= 0 ;j -- ){ // 递减
97 var img = imgs[j],
98 imgTop = _CalF.getPosition(imgs[j]).top,
99 imgSrc = img.getAttribute( " data-src " ),
100 offsetPage = window.pageYOffset ? window.pageYOffset : window.document.documentElement.scrollTop, // 滚动条的top值
101 bodyHeight = document.documentElement.clientHeight; // body的高度
102 if ((offsetPage + bodyHeight / 2) > (imgTop-bodyHeight / 2 )){
103 img.src = imgSrc;
104 this .imgs.splice(j, 1 );
105 }
106 }
107 }
108 }
109
110
111 var img1 = new scrollLoad( " scrollLoading " );
112
113 </ script >

 


本文链接:http://www.cnblogs.com/dtdxrk/p/3151001.html,转载请注明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值