美文网首页
图片预加载、瀑布流+图片预加载

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

作者: 清心挽风 | 来源:发表于2017-08-30 21:09 被阅读0次

图片预加载

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

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>

相关文章

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

    图片预加载 图片预加载是为了解决网络卡等一些其他情况造成该显示的图片不能及时的显示,但为了提高网页的完整性,给未能...

  • 预加载、延迟加载、瀑布流、拖拽

    1.预加载-图片: 2.延迟加载 3.瀑布流 瀑布流: 物体大小: 4.拖拽 磁性吸附例子: 虚线框拖拽

  • js-事件委托&图片预加载

    事件委托 图片预加载 吸顶条 图片预加载

  • 图片预加载

    背景 利用图片的预加载技术获得更好的用户体验 什么是有序预加载和无序预加载 jQuery插件的写法 图片预加载,预...

  • 瀑布流图片以及预加载

    在web项目开发中,经常遇到需要加载大量的图片,为了�提高用户体验,我们可以使用预加载技术把图片预先加载到浏览器中...

  • JS

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

  • 图片懒加载

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

  • 前端图片加载优化

    预加载 图片预加载可以提高用户体验,对于图片画廊和图片占比很大的网页内容尤其重要 css预加载 利用css的bac...

  • 【JS】图片预加载--无序加载网站loading

    课程前言: 慕课网 --图片预加载 图片预加载的特点: ( 1、网站的Loading页 2、局部图片的加载--表情...

  • JavaScript--预加载与延迟加载

    JavaScript--预加载与延迟加载 1. 预加载:就是页面打开,图片什么的都加载好了(优先显示图片) 2. ...

网友评论

      本文标题:图片预加载、瀑布流+图片预加载

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