# 懒加载和预加载

web前端


1. 懒加载

  • 1、不加载全部图片

  • 2、首先显示在页面中的图,首先进行加载

  • 3、当屏幕发生滚动的时候,判断图片是否进入用户视野,来决定图片是否加载

  • 加载步骤

          1、首先,不要将图片地址放到src中属性中,而是放到其它属性(data-original)中;
          2、页面加载完成后,根据offsetTop判断图片是否在用户视野内,如果在,则将data-original属性的值取出放到src中;
          3、在屏幕滚动事件中,重复判断图片是否进入视野,如果进入则将data-original属性中的值取出放到src中。
    
          ----------
          插件
    
          $('img').lazyload({
              effect:'fadeIn';
          });
    
          注意:设置高度
    
  • 代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>懒加载</title>
    <script src="js/jquery-3.1.1.js"></script>
    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        #container{
            width: 1000px;
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
        }
        section{
            border: 1px solid red;
            border-radius: 5px;
            overflow: hidden;
            background-color: #93ECDE; 
            width: 49%;
            margin-top: 2%;
        }
        section img{
            width: 100%;
        }
        section p{
            text-align: center;
            padding: 10px 0;
        }
    </style>
</head>
<body>
    <div id="container">
        
    </div>
    <script>
        var container = document.getElementById('container');
        $.get('http://localhost:3000/data/data1.json',function (data){
            var data = data.scenery;
            for(let item of data){
                $(`
                    <section>
                        <img src="imgs/placeholder.png" data-origin="${item.img_url}" alt="">
                        <p>${item.title}</p>
                    </section>
                `).appendTo(container);
            }
            initImg();
        });
        var innerHeight = $(window).height();
        function initImg(){
            $('section img').each(function (index,elem){
                var $this = $(this);
                this.onload = function (){
                    var top = $this.offset().top;
                    if(top < innerHeight){
                        $this.attr('src',$this.attr('data-origin'));
                    }
                }
            })
        };

        window.onscroll = function (){
            var pHeight = innerHeight + $(window).scrollTop();
            $('section img').each(function (index,elem){
                if($(this).offset().top < pHeight){
                    $(this).attr('src',$(this).attr('data-origin'));
                }
            })
        }
    </script>
</body>
</html>

2. 预加载

  • 预加载是等待服务器获取数据完成后在在页面显示
  • 示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>预加载</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        .container{
            width: 60%;
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
            display: none;
        }
        section{
            border: 1px solid red;
            border-radius: 5px;
            overflow: hidden;
            background-color: #93ECDE; 
            width: 49%;
            margin-top: 2%;
        }
        section img{
            width: 100%;
            height: 300px;
        }
        section p{
            text-align: center;
            padding: 10px 0;
        }
        .prog{
            width: 500px;
            height: 5px;
            position: fixed;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
            border-radius: 2.5px;
            border: 1px solid blue;
            overflow: hidden;
        }
        .prog p{
            height: 5px;
            width: 0;
            background-color: blue;
        }
    </style>
    <script src="js/jquery-3.1.1.js"></script>
</head>
<body>
    <div class="container">
        
    </div>
    <div class="prog">
        <p></p>
    </div>

    <script>
        var arrImg = {};
        var times = 0;
        $.get('http://localhost:3000/data/data1.json',function (data){
            var data = data.scenery;
            
            for (var p in data){
                $(`
                    <section>
                        <p>${data[p].title}</p>
                    </section>
                `).appendTo('.container');
                times++;
            }
            cj(data);
        })

        function cj(data){
            for(var p in data){
                var img = new Image();
                img.src = data[p].img_url;
                arrImg[data[p].img_url] = img;
                // console.log(img);
                var n = 0;
                img.onload = function (){
                    n++;
                    //进度条
                    var v = (n / times)*100;
                    progress(v);

                    if(n == times){
                        append();
                    }
                }
            }
        }
        function progress(v){
            console.log(v + "%");
            $('.prog p').css('width',v*5+'px');
            setTimeout(function (){
                if(v == 100){
                    $('.prog').css('display','none');
                    $('.container').css('display','block');
                }
            },100)
        }
        function append(){
            var i=0;
            for(var p in arrImg){
                $('section').eq(i).prepend(arrImg[p]);
                i++;
            }
        }
        
    </script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 1、懒加载 1.什么是懒加载? 懒加载也就是延迟加载。当访问一个页面的时候,先把img元素或是其他元素的背景图片路...
    xiaolizhenzhen阅读 70,444评论 18 160
  • 懒加载和预加载 1. 懒加载 1. 什么是懒加载? 懒加载也就是延迟加载 当访问一个页面的时候,先把img元素或是...
    琦琦出去玩了阅读 749评论 0 8
  • 1.懒加载原理 原理:先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再img标签的...
    喵妈阅读 3,334评论 0 3
  • 自动加载 自动加载就是符合某些条件时才加载某些图片。 现在好多的网站都用到了自动加载图片技术,比如淘宝,刚打开淘宝...
    shadow123阅读 899评论 0 0
  • 老实说身为Java developer,许多应该掌握的知识只是半知半解,比如最近碰到的几个高频词: 懒加载 和 ...
    陈王酒诗阅读 1,860评论 0 3