亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js圖片延遲加載的實現方法及思路

2019-11-20 22:30:11
字體:
來源:轉載
供稿:網友
大概的實現方式是:
在頁面的load沒有觸發之前,把所有的指定id的元素內的img放入到imgs中,將所有的圖片的src值放入到一個新建的_src屬性中,把src設置為指定的顯示圖片。
然后,在document.body的scroll事件觸發時,循環計算imgs中的img元素位置是否正好在瀏覽器顯示框范圍內,如果是,則將img元素的_src屬性的值賦給src,這樣圖片就能顯示出來。
這里比較麻煩地方是,如何計算img的位置,獲得元素的相對于頁面的絕對位置。通常是用offsetLeft和offsetTop,但這兩個屬性是元素的offsetParent指向的元素的相對位置, 如果offsetParent所指的元素是設置了浮動的或使用絕對定位,那么offsetLeft來獲得絕對位置就不正確呢。
在這里我是將元素的所有父級元素的offsetTop之和來獲得文檔絕對位置的。
復制代碼 代碼如下:

//取元素的頁面絕對 X位置
        var getLeft = function(El){
            var left = 0;
            do{
                left += El.offsetLeft;
            }while((El = El.offsetParent).nodeName != 'BODY');
            return left;
        };
        //取元素的頁面絕對 Y位置
        var getTop = function(El){
            var top = 0;
            do{
                top += El.offsetTop;
            }while((El = El.offsetParent).nodeName != 'BODY');
            return top;
        };

在設置窗口的scroll事件時,ie使用是document.documentElement,而其他的瀏覽器都使用document。
 接下來是要獲得瀏覽器顯示窗口現對于文檔的位置,用了下面的代碼來計算
復制代碼 代碼如下:

//讀取滾動條的位置和瀏覽器窗口的顯示大小
             var top = isGoo ? document.body.scrollTop : document.documentElement.scrollTop,
                 left = isGoo ? document.body.scrollLeft :document.documentElement.scrollLeft,
                 width = document.documentElement.clientWidth,
                 height = document.documentElement.clientHeight;

谷歌瀏覽器要通過body來獲得scrollTop,而其他瀏覽器通過documentElement。
 最后迭代判斷img的位置,并顯示圖片
復制代碼 代碼如下:

//對所有圖片進行批量判斷是否在瀏覽器顯示區域內
            for(var i=0 ; i < imgs.length; i++){
                var _top = getTop(imgs[i]),_left = getLeft(imgs[i]);
                //判斷圖片是否在顯示區域內
                if( _top >= top &&
                    _left >= left &&
                    _top <= top+height &&
                    _left <= left+width){
                    var _src = imgs[i].getAttribute('_src');
                    //如果圖片已經顯示,則取消賦值
                    if(imgs[i].src !== _src){
                        imgs[i].src = _src;
                    }
                }
            }

可以運行的代碼
復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>js圖片延遲加載</title>
</head>
<body>
<table id="out1" style="height:2450px;">
<tr>
<td><img src="http://www.49028c.com/small/2011_4_22/photo163115955184917.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_4_13/photo163175537548397.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_4_16/photo16314557927776.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_4_10/photo1631932180569094.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_4_1/photo1630540642223.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_4_2/photo1638657445827.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_29/photo16384188604.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_29/photo16384188604.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_4_13/photo16311444254618471.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_15/photo16318118126415.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310513957332.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310342238265.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_14/photo163103452142757.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310310447460.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_14/photo163103347259334.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310342238265.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_14/photo163102333593532.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16323618120479.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16323942409450.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_15/photo1630653584606.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_12/photo163233846816799.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_13/photo16313216736705.jpg" alt="" /></td>
</tr>
<tr>
<td><img src="http://www.49028c.com/small/2011_3_1/photo16313391752186220.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_1/photo163765186092776.jpg" alt="" /></td>
</tr>
</table>
<table id="out2" style="width:4883px">
<tr>
<td><img src="http://www.49028c.com/small/2011_4_22/photo163115955184917.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_4_13/photo163175537548397.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_4_16/photo16314557927776.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_4_10/photo1631932180569094.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_4_1/photo1630540642223.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_4_2/photo1638657445827.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_29/photo16384188604.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_29/photo16384188604.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_4_13/photo16311444254618471.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_15/photo16318118126415.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310513957332.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310342238265.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo163103452142757.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310310447460.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo163103347259334.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16310342238265.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo163102333593532.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16323618120479.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_14/photo16323942409450.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_15/photo1630653584606.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_12/photo163233846816799.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_13/photo16313216736705.jpg" alt="" /></td>
<td><img src="http://www.49028c.com/small/2011_3_1/photo16313391752186220.jpg" alt="" /> </td>
<td><img src="http://www.49028c.com/small/2011_3_1/photo163765186092776.jpg" alt="" /></td>
</tr>
</table>
</body>
</html>
  <script type="text/javascript">
        function delayload(option){
            //讀取參數
            //圖片未加載時顯示的圖片
            var src = option.src ? option.src : '',
            //指定那些id下的img元素使用延遲顯示
                id = option.id ? option.id : [];
            //圖片列表
            var imgs = [];
            //獲得所有的圖片元素
            for(var i=0 ; i < id.length ; i++){
                var idbox = document.getElementById(id[i]),_imgs;
                if(idbox && (_imgs = idbox.getElementsByTagName('img'))){
                    for(var t=0 ; t < _imgs.length ; t++){
                        imgs.push(_imgs[t]);
                    }
                }
            }
            //將所有的圖片設置為指定的loading圖片
            for(var i=0 ; i < imgs.length ; i++){
                //圖片本來的圖片路徑放入_src中
                imgs[i].setAttribute('_src',imgs[i].src);
                imgs[i].src = src;
            }
            //取元素的頁面絕對 X位置
            var getLeft = function(El){
                var left = 0;
                do{
                    left += El.offsetLeft;
                }while((El = El.offsetParent).nodeName != 'BODY');
                return left;
            };
            //取元素的頁面絕對 Y位置
            var getTop = function(El){
                var top = 0;
                do{
                    top += El.offsetTop;
                }while((El = El.offsetParent).nodeName != 'BODY');
                return top;
            };
            //是否為ie,并讀出ie版本
            var isIE = !!navigator.userAgent.match(/MSIE/b/s*([0-9]/.[0-9]);/img);
            isIE && (isIE = RegExp.$1);
            //是否為chrome
            var isGoo = !!navigator.userAgent.match(/AppleWebKit/b/img);
            //獲得可以觸發scroll事件的對象
            var box = isIE ? document.documentElement : document;
            //body元素的scroll事件
            var onscroll = box.onscroll = function(){
                //讀取滾動條的位置和瀏覽器窗口的顯示大小
                var top = isGoo ? document.body.scrollTop : document.documentElement.scrollTop,
                    left = isGoo ? document.body.scrollLeft :document.documentElement.scrollLeft,
                    width = document.documentElement.clientWidth,
                    height = document.documentElement.clientHeight;
                //對所有圖片進行批量判斷是否在瀏覽器顯示區域內
                for(var i=0 ; i < imgs.length; i++){
                    var _top = getTop(imgs[i]),_left = getLeft(imgs[i]);
                    //判斷圖片是否在顯示區域內
                    if( _top >= top &&
                        _left >= left &&
                        _top <= top+height &&
                        _left <= left+width){
                        var _src = imgs[i].getAttribute('_src');
                        //如果圖片已經顯示,則取消賦值
                        if(imgs[i].src !== _src){
                            imgs[i].src = _src;
                        }
                    }
                }
            };
            var load = new Image();
            load.src = src;
            load.onload = function(){
                onscroll();
            };
        }
        delayload({id:['out1','out2'],src:'//files.VeVB.COm/file_images/article/201307/2013072210300234.jpg'});
      </script>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久97精品久久久久久久不卡| 国产成人+综合亚洲+天堂| 69久久夜色精品国产69| 国产亚洲欧美日韩一区二区| 国产一区二区av| 亚洲成人av片在线观看| 国产69精品久久久| 97精品久久久| 色樱桃影院亚洲精品影院| 国产精品扒开腿做爽爽爽视频| 色综合久久久888| 国产精品福利网| 亚洲欧美激情另类校园| 97在线免费视频| 精品日韩视频在线观看| 成人午夜高潮视频| 久久夜色精品亚洲噜噜国产mv| 91在线观看免费高清完整版在线观看| 亚洲天堂一区二区三区| 久久久久亚洲精品成人网小说| 国产99视频精品免视看7| 尤物九九久久国产精品的特点| 亚洲xxx自由成熟| 成人免费观看网址| 日韩在线免费视频| 成人精品aaaa网站| 成人网在线免费看| 亚洲成人黄色网| 欧美一区二区三区四区在线| 亚洲精品91美女久久久久久久| 欧美人在线观看| 日韩精品免费一线在线观看| 国产精品激情av电影在线观看| 尤物精品国产第一福利三区| 欧美性猛交xxxx乱大交蜜桃| 欧美亚洲一级片| 免费不卡在线观看av| 北条麻妃99精品青青久久| 欧美精品在线免费播放| 日韩美女视频免费看| 中文字幕亚洲图片| 日韩国产在线看| 美女黄色丝袜一区| 国产欧美韩国高清| 一本色道久久88综合亚洲精品ⅰ| 亚洲欧美日韩另类| 欧美成人中文字幕| 国产精品jvid在线观看蜜臀| 国产精品视频99| 亚洲成色777777女色窝| 一区二区在线免费视频| 亚洲free性xxxx护士hd| 亚洲精品av在线| 国产香蕉一区二区三区在线视频| 国产精品日韩欧美大师| 一区二区三区四区精品| 亚洲人精选亚洲人成在线| 日韩激情av在线播放| 国产综合久久久久久| 亚洲free性xxxx护士白浆| 国产精品99导航| 精品久久久久久久中文字幕| 亚洲理论片在线观看| 最近免费中文字幕视频2019| 自拍视频国产精品| 中文字幕成人在线| 久久久久久高潮国产精品视| 91精品国产91久久久久久久久| 国产亚洲欧美日韩精品| 国产精品中文字幕在线观看| 久久激情视频免费观看| 91亚洲国产成人精品性色| 亚洲国产欧美自拍| www.日韩欧美| 久久天天躁狠狠躁老女人| 91成品人片a无限观看| 国产中文日韩欧美| 中文字幕免费国产精品| 91久久精品国产91性色| 久久久最新网址| 97国产精品视频人人做人人爱| 精品国产福利视频| 久久99热这里只有精品国产| 57pao国产精品一区| 久久激情视频免费观看| 日韩小视频网址| 亚洲国产精品va在线看黑人动漫| 一本色道久久88综合亚洲精品ⅰ| 国产精品私拍pans大尺度在线| 久久久久久亚洲精品| 日本久久久a级免费| 久久久久久噜噜噜久久久精品| 国产91免费观看| 亚洲欧美日韩中文在线制服| 欧美久久精品一级黑人c片| 日韩欧美在线视频免费观看| 热re91久久精品国99热蜜臀| 欧美亚洲另类制服自拍| 亚洲成av人影院在线观看| www.日韩系列| 成人免费午夜电影| 中文字幕欧美日韩va免费视频| 91精品国产免费久久久久久| 国产欧美精品在线| 国产一区二区色| 国产在线精品成人一区二区三区| 亚洲视频视频在线| 国产精品美女久久久久av超清| 欧美日韩中文字幕| 日韩欧美在线第一页| 亚洲成人精品视频在线观看| 九九热这里只有在线精品视| 粉嫩老牛aⅴ一区二区三区| 97在线免费视频| 成人淫片在线看| 欧美日韩亚洲一区二| 日韩欧美在线一区| 午夜精品久久久久久久男人的天堂| 国产成人avxxxxx在线看| 久久久久久18| 麻豆乱码国产一区二区三区| 91超碰caoporn97人人| 亚洲老司机av| 欧美成人精品一区二区| 久久精品国产免费观看| 2018日韩中文字幕| 久热爱精品视频线路一| 欧美日韩成人黄色| 欧美性xxxx在线播放| 45www国产精品网站| 亚洲精品mp4| 亚洲欧美制服综合另类| 少妇高潮久久77777| 中文字幕日韩欧美在线视频| 国产亚洲免费的视频看| 日韩欧美高清在线视频| 亚洲自拍偷拍网址| 国产精品99免视看9| 69视频在线免费观看| 正在播放欧美一区| 亚洲精品一区中文| 精品毛片网大全| 国产精品av电影| 欧美激情a在线| 一区二区三区久久精品| 欧美亚洲激情视频| 日韩精品小视频| 欧美视频在线视频| 午夜精品一区二区三区在线播放| 日韩av免费看网站| 国产精品免费观看在线| 日韩亚洲成人av在线| 美日韩精品免费观看视频| 这里只有精品视频在线| 久久久国产精品x99av| 久久久久国产精品免费网站| 久久久999精品| 4k岛国日韩精品**专区| 亚洲一区二区三区xxx视频| 91亚洲精华国产精华| 国产视频自拍一区| 91精品国产91久久久久| 国产91精品在线播放| 国产欧美最新羞羞视频在线观看|