懒加载简单的方法

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <title>懒加载实例</title>
    <style type="text/css">
        /*一定要有预先高度*/
        img{
             600px;
            height: 260px;
        }
        .samLazyImg{
            position: relative;
        }
    </style>
</head>

<body>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/11de79502d0af.jpg!v1sell" alt="" />
</div>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/33f99f823ed3d.jpg!v1sell" alt="" />
</div>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/680120973b82.jpg!v1sell" alt="" />
</div>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/67f87ba08cf0.jpg!v1sell" />
</div>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/22ec075a17c33.jpg!v1sell" alt="" />
</div>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/2e4a699680788.jpg!v1sell" alt="" />
</div>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/c2f4043a4991.jpg!v1sell" alt="" />
</div>
<div>
    <img class="samLazyImg" src="http://a.tbcdn.cn/mw/webapp/fav/img/grey.gif" dataimg="http://yangege.b0.upaiyun.com/33f996b4386ab.jpg!v1sell" alt="" />
</div>
</body>
<script src="jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    var lazyload = {
        init : function(opt){
            var that = this,
                op = {
                    anim: true,
                    extend_height:0,
                    selectorName:"img",
                    realSrcAtr:"dataimg"
                };
            // 合并对象,已有的{anim:true}+用户自定义对象。也就是op = op + opt
            $.extend(op,opt);
            // 调用lazyload.img.init(op)函数
            that.img.init(op);

        },

        img : {
            init : function(n){

                var that = this,
                    selectorName = n.selectorName,
                    realSrcAtr = n.realSrcAtr,
                    anim = n.anim;
//              console.log(n);

                // 要加载的图片是不是在指定窗口内
                function inViewport( el ) {
                    // 当前窗口的顶部
                    var top = window.pageYOffset,
                        // 当前窗口的底部
                        btm = window.pageYOffset + window.innerHeight,
                        // 元素所在整体页面内的y轴位置
                        elTop = $(el).offset().top;
                    // 判断元素,是否在当前窗口,或者当前窗口延伸400像素内
                    return elTop >= top && elTop - n.extend_height <= btm;
                }

                // 滚动事件里判断,加载图片
                $(window).on('scroll', function() {
                    $(selectorName).each(function(index,node) {
                        var $this = $(this);

                        if(!$this.attr(realSrcAtr) || !inViewport(this)){
                            return;
                        }

                        act($this);

                    })
                }).trigger('scroll');

                // 展示图片
                function act(_self){
                    // 已经加载过了,则中断后续代码
                    if (_self.attr('lazyImgLoaded')) return;
                    var img = new Image(),
                        original = _self.attr('dataimg');
                    // 图片请求完成后的事件,把dataimg指定的图片,放到src里面,浏览器显示
                    img.onload = function() {
                        _self.attr('src', original);
                        _self.css({ "opacity": ".2","top":"1rem" }).animate({ "opacity": "1","top":"0" }, 280);
                    };
                    // 当你设置img.src的时候,浏览器就在发送图片请求了
                    original && (img.src = original);
                    _self.attr('lazyImgLoaded', true);
                }
            }
        }
    };

    /*
     * selectorName,要懒加载的选择器名称
     * extend_height  扩展高度
     * anim  是否开启动画
     * realSrcAtr  图片真正地址*/
    lazyload.init({
        anim:false,
        selectorName:".samLazyImg"
    });
</script>

</html>

  

原文地址:https://www.cnblogs.com/huangqiming/p/7479058.html