• Javascript Lazyload延迟加载特效


    Javascript Lazyload延迟加载特效,大家帮看看有问题没

    源代码在底部,效果如下:

     

    延时加载

    有点简单了吧,核心代码就这点:

    复制代码
    function imgLazyLoad(){
            var timer,screenHeight = document.documentElement.clientHeight;
            var elems = Lazy.$('.lazyload');
            elems = Lazy.toArray(elems);
            Lazy.bind(window,'scroll',loading);
            function loading(){
                timer && clearTimeout(timer);
                timer = setTimeout(function(){
                    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
                    for(var i = 0;i<elems.length;i++){
                        // 图像距离屏幕顶部的距离
                        var pos = Lazy.getPos(elems[i]).top - scrollTop;
                        // 如果距离顶部的距离小于屏幕的高度而且大于0则赋值SRC
                        if(pos >0 && pos < screenHeight){
                            elems[i].src = elems[i].getAttribute('data-img');
                            elems.splice(i,1);
                        }
                    }
                    if(elems.length == 0){
                        Lazy.unbind(window,'scroll',loading);
                    }
                },300);
            }
        }
    复制代码

    总的源代码如下:

    复制代码
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>延时加载</title>
        <meta name="keywords" content="延时加载"/>
        <meta name="description" content="延时加载"/>
    </head>
    <style type="text/css">
        .picBox { text-align: center;}
        .picBox ul{ list-style: none;}
        .picBox ul li { width: 640px; height: 480px; border: 3px solid #ccc; margin-top: 10px; background: url(http://images.cnblogs.com/cnblogs_com/NNUF/379856/o_loading.gif) no-repeat 50% 50%; }
    </style>
    <body>
    <div class="picBox">
        <ul>
            <li><img data-img="http://farm4.staticflickr.com/3099/2472111608_17b12f5a17_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm4.staticflickr.com/3648/3438347792_2d33b1d09c_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm8.staticflickr.com/7001/6794999999_ec3ff66a5c_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm8.staticflickr.com/7084/7034721601_09f04266ac_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm8.staticflickr.com/7215/7195069176_20ea93a8e4_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm8.staticflickr.com/7226/7270774038_19b4e87179_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm3.staticflickr.com/2430/3977773445_39c57db815_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm8.staticflickr.com/7097/7036796167_9b216e51c7_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm8.staticflickr.com/7020/6540080851_fcb7f1e3dd_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
            <li><img data-img="http://farm8.staticflickr.com/7102/7370904306_9a8dc71eb7_z.jpg" src="http://images.cnblogs.com/cnblogs_com/NNUF/379856/t_space.gif" alt="" class='lazyload'></li>
        </ul>
    </div>
    <script type="text/javascript">
        var Lazy = {
            $:function(arg,context){
                var tagAll,n,eles=[],i,sub = arg.substring(1);
                context = context||document;
                if(typeof arg =='string'){
                    switch(arg.charAt(0)){
                        case '#':
                            return document.getElementById(sub);
                            break;
                        case '.':
                            if(context.getElementsByClassName) return context.getElementsByClassName(sub);
                            tagAll = Lazy.$('*',context);
                            n = tagAll.length;
                            for(i = 0;i<n;i++){
                                if(tagAll[i].className.indexOf(sub) > -1) eles.push(tagAll[i]);
                            }
                            return eles;
                            break;
                        default:
                            return context.getElementsByTagName(arg);
                            break;
                    }
                }
            },
            getPos:function (node) {
                var scrollx = document.documentElement.scrollLeft || document.body.scrollLeft,
                        scrollt = document.documentElement.scrollTop || document.body.scrollTop;
                var pos = node.getBoundingClientRect();
                return {top:pos.top + scrollt, right:pos.right + scrollx, bottom:pos.bottom + scrollt, left:pos.left + scrollx }
            },
            bind:function(node,type,handler){
                node.addEventListener?node.addEventListener(type, handler, false):node.attachEvent('on'+ type, handler);
            },
            unbind:function(node,type,handler){
                node.removeEventListener?node.removeEventListener(type, handler, false):node.detachEvent('on'+ type, handler);
            },
            toArray:function(eles){
                var arr = [];
                for(var i=0,n=eles.length;i<n;i++){
                    arr.push(eles[i]);
                }
                return arr;
            }
        };
        function imgLazyLoad(){
            var timer,screenHeight = document.documentElement.clientHeight;
            var elems = Lazy.$('.lazyload');
            elems = Lazy.toArray(elems);
            Lazy.bind(window,'scroll',loading);
            function loading(){
                timer && clearTimeout(timer);
                timer = setTimeout(function(){
                    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
                    for(var i = 0;i<elems.length;i++){
                        // 图像距离屏幕顶部的距离
                        var pos = Lazy.getPos(elems[i]).top - scrollTop;
                        // 如果距离顶部的距离小于屏幕的高度而且大于0则赋值SRC
                        if(pos >0 && pos < screenHeight){
                            elems[i].src = elems[i].getAttribute('data-img');
                            elems.splice(i,1);
                        }
                    }
                    if(elems.length == 0){
                        Lazy.unbind(window,'scroll',loading);
                    }
                },300);
            }
        }
        imgLazyLoad();
    </script>
    </body>
    </html>
    复制代码
     
    分类: JS实例
  • 相关阅读:
    【找回数学的感觉】1 再版汉诺塔等
    【算法】7 分不清栈和队列?一张图给你完整体会
    好玩的WPF第四弹:用Viewport2DVisual3D实现3D旋转效果
    我们应该怀念爱因斯坦的五个原因
    【万里征程——Windows App开发】如何在多个页面间读取/保存文件【草稿】
    仅仅是来自深夜的想法
    好玩的WPF第三弹:颤抖吧,地球!消失吧,地球!
    Markdown大赛二等奖
    让JavaScript在Visual Studio 2015中编辑得更容易
    好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效按钮
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2562792.html
Copyright © 2020-2023  润新知