美文网首页
图片懒加载

图片懒加载

作者: 小漠穷秋 | 来源:发表于2017-11-15 20:45 被阅读0次

涉及知识:
1.防抖思想
2.this指针
3.元素位置计算

讲解:
1.见文集
2.见文集
3.元素位置:
可以见如下经典图


image.png
image.png

源代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
#con div {
width: 300px;
height: 200px;
overflow: hidden;
margin: auto;
}

        img {
            width: 100%;
            height: 100%;
        }
    </style>
</head>

<body>
    <div id="con">
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
        <div><img src="" data-src="http://img5.imgtn.bdimg.com/it/u=2033765348,1346395611&fm=206&gp=0.jpg" /></div>
    </div>
    <div style="height: 500px;background: red;position: relative;padding:1px;display: block;">
        <div id="a" style="margin-top: 10px;background: yellow; height: 100px;"></div>
    </div>
</body>
<script type="text/javascript">
    window.onload = function() {
        new LazyLoad('con');
    }
    function LazyLoad(id) {
        this.container = document.getElementById(id);
        this.imgs = this.getImages();
        this.init();
    }
    LazyLoad.prototype = {
        init: function(){
            this.update(this);
            this.bindEvent();
        },
        debounce: function(fn,timer) {
        var timeout = null;
        return function() {
            if (timeout != null) {
                clearTimeout(timeout);
            }
            timeout = setTimeout(fn.bind(this),timer);//wettimeout让this指向了window,通过bind绑定到当前对象
        }
    },
        getImages: function(){
            var imgs = [];
            var images = this.container.getElementsByTagName('img');
            for(var i = 0; i < images.length; i++) {
                imgs.push(images[i]);
            }
            return imgs;
        },
        bindEvent: function(){
            this.on(window,'scroll',this.debounce(this.update,5000),this);
            this.on(window,'resize',this.debounce(this.update,5000),this);
        },
        update:function(){
            if(!this.imgs.length) return;
            var length = this.imgs.length;
            for(i=length-1;i>=0;i--) {
                if (this.isShow(this.imgs[i])) {
                    this.imgs[i].src = this.imgs[i].getAttribute("data-src");
                    this.imgs.splice(i,1);
                }
            }
        },
        isShow:function(img){
            var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            var scrollBottom = document.documentElement.clientHeight + scrollTop;
            var imgTop = this.pageY(img) ;
            console.log(img);
            var imgBottom = imgTop + img.offsetHeight;
            if (imgTop > scrollTop && imgTop < scrollBottom || imgBottom < scrollBottom && imgBottom > scrollTop ) {
                return true;
            }
            else{
                return false;
            }

        },
        on:function(ele,event,fn,context){
            if(ele.addEventListener) {
                ele.addEventListener(event,fn.bind(context));//这里addeventlistener之后this指针指向了window
            }
            else{
                ele.attachEvent("on"+event,fn.bind(context));
            }
        },
        pageY:function(ele){
            if (ele.offsetParent) {
                return ele.offsetTop + this.pageY(ele.offsetParent);
            }
            else {
                return ele.offsetTop;
            }
        }
    }

</script>

</html>

相关文章

  • 项目优化

    图片懒加载,数据懒加载, 路由懒加载 1.图片懒加载原理 1.1 开始时 不设置src属性 1.2 图片在可视区域...

  • JS

    JS 懒加载,预加载 概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加...

  • 图片懒加载

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片。 预...

  • 图片懒加载

    图片懒加载 图片懒加载在一些图片密集型的网站中运用比较多,通过图片懒加载可以让一些不可视的图片不去加载,避免一次性...

  • js 实现图片懒加载

    一、懒加载 懒加载也叫延迟加载,Js中图片的延迟加载,延迟图片需要符合某些条件时才加载;对于图片过多的页面,为了加...

  • 图片懒加载和预加载

    图片懒加载的原理是什么? 首先明白为什么要懒加载: 懒加载即延迟,对于图片过多的页面,为了加快页面加载速度,我们需...

  • selenuim和phantonJs处理网页动态加载数据的爬取

    一.图片懒加载 什么是图片懒加载? 图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源...

  • 懒加载和瀑布流

    一、简述图片懒加载的实现原理 图片懒加载 若一开始,页面上有许多的图片要加载,而如果同时加载这么多图片,会消耗性能...

  • jquery懒加载、回到顶部

    1.知识点部分: 懒加载图片的原理是什么? 图片懒加载也称为曝光加载,将页面上的图片分批加载,只有当图片出现在wi...

  • 懒加载和预加载

    1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加载:提前加载图片...

网友评论

      本文标题:图片懒加载

      本文链接:https://www.haomeiwen.com/subject/igghvxtx.html