图片预加载、瀑布流+图片预加载

图片预加载

图片预加载是为了解决网络卡等一些其他情况造成该显示的图片不能及时的显示,但为了提高网页的完整性,给未能及时加载出来的图片添加一个图标告诉用户正在加载图片。

window.onload=function(){
//使用闭包函数
                var imgObj=(function(){
                    //创建一个img对象,利用该对象帮程序请求正式的图片
                    var imgObject=new Image();
                    
                    //创建一个img标签,用来展示图片
                    var imgTag=document.createElement('img');
                    //把imgTag拼接进文档流
                    document.body.appendChild(imgTag);
                    //当imgObject把图片下载完毕时,会触发该对象的load事件,在这个事件中,
                    //把imgTag展示的占位图片替换为正式图片
                    imgObject.onload=function(){
                        imgTag.src=this.src;
                    }
                    
                    return {
                        src:function(src){
                            //给图片标签设置占位图
                            imgTag.src='http://ww1.sinaimg.cn/mw1024/64eeab82gw1f9bjahlklaj203k03kmwy.jpg';
                            //给图片标签设置正式图
                            imgObject.src=src;
                            
                        }
                    }
                })();
                imgObj.src('http://img10.360buyimg.com/n1/s450x450_jfs/t3079/22/1186487500/120409/d87f6ab7/57c7c23fNec4956f3.jpg');
            }

瀑布流+图片预加载

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

    <head>
        <meta charset="UTF-8">
        <title>花瓣网瀑布流</title>

        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
                list-style: none;
            }
            
            ul {
                width: 250px;
                float: left;
                margin: 0 5px;
            }
            
            ul>li {
                margin-bottom: 10px;
                width: 250px;
            }
            
            #flow {
                width: 1100px;
                margin: 20px auto;
            }
            
            #flow:after {
                content: "";
                display: block;
                clear: both;
            }
        </style>
        <script type="text/javascript">
            /*
             *  随机图片接口:https://unsplash.it/300/800/?random
             *  参数:300:表示图片的宽度
             *  参数:800:表示图片的高度
             */
        </script>

    </head>

    <body>
        <!-- 瀑布流容器 -->
        <div id="flow">
            <!-- 四列瀑布流 -->
            <ul id="list1"></ul>
            <ul id="list2"></ul>
            <ul id="list3"></ul>
            <ul id="list4"></ul>
        </div>
    </body>

    <script type="text/javascript">
        // 页面加载完毕后,触发加载图片事件
        window.onload = function() {
            // 先定一个小目标:创建20个图片
            createNimg(20);

        }

        // 页面滚动高度大于最短一列图片高度,继续加载新图片
        window.onscroll = function() {
            // 获取所有的ul
            var ulArr = document.getElementsByTagName('ul');
            // 拿到最短一列下标
            var minIndex = getMinHeight(ulArr);
            // 获取当前页面滚动高度
            var h = clientH() + scrollY();
            // 页面高度大于最短一列高度,继续添加新图片
            if(ulArr[minIndex].offsetHeight < h) {
                createNimg(20);
            }
        }

        // 循环创建N个图片
        function createNimg(n) {
            for(var i = 0; i < n; i++) {
                appendImg();
            }
        }

        // 向最短的ul中拼图片
        function appendImg() {
            // 获取所有的ul
            var ulArr = document.getElementsByTagName('ul');
            // 拿到最短的ul下标
            var minIndex = getMinHeight(ulArr);
            // 创建Li
            var li = document.createElement('li');
            // 获取图片
            var imgTag = createImg();
            // 图片进li
            li.appendChild(imgTag);
            // li进ul
            ulArr[minIndex].appendChild(li);
        }

        // 获取最短的一列ul下标
        function getMinHeight(ulArr) {
            var minUl = 0;
            for(var i = 0; i < ulArr.length; i++) {
                if(ulArr[i].offsetHeight < ulArr[minUl].offsetHeight) {
                    minUl = i;
                }
            }

            return minUl;
        }

        // 创建图片及其所属相关标签的函数
        function createImg() {
            
            // 通过随机数函数确定图片的高度
            h = random(400, 800);           
            var imgObj = (function() {
                //创建一个img对象,利用该对象帮程序请求正式的图片
                var imgObject = new Image();

                //创建一个img标签,用来展示图片
                var imgTag = document.createElement('img');
                imgTag.style.width = '250px';
                imgTag.style.height = h + 'px';             
                //当imgObject把图片下载完毕时,会触发该对象的load事件,在这个事件中,
                //把imgTag展示的占位图片替换为正式图片
                imgObject.onload = function() {
                    imgTag.src = this.src;
                }

                return {
                    src: function(src) {
                        //给图片标签设置占位图
                        imgTag.src = 'http://ww1.sinaimg.cn/mw1024/64eeab82gw1f9bjahlklaj203k03kmwy.jpg';
                        //给图片标签设置正式图
                        imgObject.src = src;
                    },
                    imgs:imgTag
                }
            })();
            imgObj.src('https://unsplash.it/250/' + h + '/?random');
            var img=imgObj.imgs;
            return img;
        }

        /*工具类函数库*/

        // 随机数函数
        function random(min, max) {
            return parseInt(Math.random() * (max - min) + min);
        }

        function clientH() { //获取可视区高度
            return window.innerHeight || document.documentElement.clientHeight;
        }

        function scrollY() { //获取滚动条高度
            return document.body.scrollTop || document.documentElement.scrollTop;
        }
    </script>

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,268评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,982评论 4 60
  • 全方位剖析 考点分析 MySQL数据类型延伸:MySQL的基础操作延伸:MySQL存储引擎延伸:MySQL存储机制...
    followyounger1阅读 421评论 0 1
  • #幸福是需要修出来的~每天进步1%~幸福实修13班~4吕敏杭州# 20171201(4/60) 【幸福三朵玫瑰】 ...
    嘟嘟妈妈2727阅读 226评论 5 6