瀑布流图片加载

有个小问题窗口改变的时候会被重新刷新loadingimg函数,请自行修改,

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            .imglist{width: 100%;height: auto;position: relative;}
            .imglist ul{padding:0px;margin:0px auto;position: relative;}
            .imglist ul li{width: 220px;border:1px solid #ccc;padding: 5px;float: left;list-style: none;position: absolute;}
            .imglist ul li img{width: 100%;vertical-align: middle;}
            .more{position: absolute;display: block;width: 100px;height:30px;padding: 5px 10px;background-color: #efefef;color:#333;left: 0px;right:0px;margin: 0px auto;border:none;border-radius: 4px;}
        </style>
    </head>
    <body>
        <div class="imglist">
            <ul id="list">

            </ul>
            <button class="more" type="button" style="cursor: pointer;">更多</button>
        </div>
<script>
var loadingfun = function(){
           this.loadingimg = function(){
               loadingimg();
           }
           this.changesize = function(){
               changesize();
           }
        function changesize(){
        /**重新计算页面宽度并获取列数**/
            var documentwidthagain = document.documentElement.offsetWidth,//页面宽度
            ullistagain = document.getElementById(‘list‘),
            litagarrayagain = ullistagain.getElementsByTagName(‘li‘),//获取li集合
            lilengthagain = litagarrayagain.length,//获取li的个数
            liwidthagain = litagarrayagain[0].offsetWidth,//获取li宽度
            litagheighagain= [],
            rowagain = Math.floor(documentwidthagain/liwidthagain),//获取列数
            rowheightagain = [];
            ullistagain.style.width = rowagain*liwidthagain+‘px‘;//重新定义ul的宽度
            for(var i=0;i<rowagain;i++){
                litagarrayagain[i].style.top = 0+"px";
                litagarrayagain[i].style.left = liwidthagain*i+"px";
                litagheighagain.push(litagarrayagain[i].offsetHeight);
                rowheightagain.push(litagheighagain[i]);
            }
            for(var i=rowagain;i<lilengthagain;i++){
                litagheighagain.push(litagarrayagain[i].offsetHeight);
                var loadingimgsli = new loadingimg();
                var minindex = loadingimgsli.minheight(rowheightagain);
                    litagarrayagain[i].style.top = rowheightagain[minindex]+"px";
                    litagarrayagain[i].style.left = liwidthagain*minindex+"px";
                    rowheightagain[minindex] +=litagheighagain[i];
            }
        /**列数定义完成**/
        }
    function loadingimg(){
           var numimg = 10,
               fristnum = 10;//初始加载数据条数
        (function ajaximg(){
                var litagarray =null,
                     lilength =null,
                     liwidth=null,
                    litagheigh =[],//各个li模块的高度
                    rowheight =[],//各个列的高度
                    row=null,
                    objectresult ="",
                    ullist = null,
                    more = document.getElementsByClassName(‘more‘)[0];
                if(window.XMLHttpRequest){
                    xmlhttp =new XMLHttpRequest();
                }else{
                    xmlhttp = new ActiveXObject(‘Micrsot.XMLHTTP‘);
                }
            (function readyajax(){
                 xmlhttp.onreadystatechange = function(){
                    if(xmlhttp.status==200&&xmlhttp.readyState==4){
                        var resultdata = eval(‘(‘+xmlhttp.responseText+‘)‘),
                        _htmlallli = ‘‘,
                        indexnum=0;
                        ullist = document.getElementById(‘list‘);
                        objectresult = resultdata.imgdata;
                        datalength = objectresult.length;
                        /*****获取li*****/
                        (function imgload(){
                        var imagesload = new Image();//实例化图片缓存函数
                            imagesload.onload = function(){
                                //如果缓存完图片则获取li并插入
                                if(indexnum==fristnum){
                                    for(var i=0;i<fristnum;i++){
                                        var _htmlli = "<li><a href=‘‘><img src="+objectresult[i].urlimg+" /></a></li>";
                                        _htmlallli +=_htmlli;
                                    }
                                        /***插入li****/
                                        addhtml(_htmlallli,ullist);
                                        /**定义列数**/
                                        litagarray = ullist.getElementsByTagName(‘li‘);//获取li集合
                                        lilength = litagarray.length;//获取li的个数
                                        liwidth = litagarray[0].offsetWidth;//获取li宽度
                                        documentwidth = document.documentElement.offsetWidth;//页面宽度;
                                        row = Math.floor(documentwidth/liwidth);
                                        ullist.style.width = row*liwidth+‘px‘;
                                        /**列数定义完成**/
                                        //获取各个模块的高度
                                        for(var i=0;i<lilength;i++){
                                            litagheigh.push(litagarray[i].offsetHeight);
                                        }
                                        /**初始化第一列的各模块的top与left并获取列的高度**/
                                        for(var i=0;i<row;i++){
                                            litagarray[i].style.top = 0+‘px‘;
                                            litagarray[i].style.left = liwidth*i+‘px‘;
                                            rowheight.push(litagarray[i].offsetHeight);
                                        }
                                        /**插入新的模块,从最短一列开始插入,并更新该列的高度**/
                                        for(var i=row;i<fristnum;i++){
                                        var minindex = minheight(rowheight);//获取最短列的索引
                                            litagarray[i].style.top = rowheight[minindex] +‘px‘;//设置模块的top
                                            litagarray[i].style.left = liwidth*minindex+‘px‘;//设置模块的left
                                            rowheight[minindex] = litagheigh[i]+rowheight[minindex];//更新最短列的高度
                                        }
                                        var thistop = maxheight(rowheight);
                                        more.style.top = thistop +‘px‘;
                                    }else{
                                        imgload()//没有缓存完则继续缓存
                                    }
                            }
                            imagesload.src = objectresult[indexnum].urlimg;//缓存图片
                            indexnum++;
                        })()
                    }
                }
                xmlhttp.open(‘POST‘,‘imgdata.php‘);
                xmlhttp.setRequestHeader("Content-type","application/json;charset=utf-8");
                xmlhttp.send(null);
            })()
                //点击更多事件
             more.onclick = function(){
                 var indexnumtwo = fristnum;
                 (function imageloading(){
                     var imagesloadtwo = new Image();//实例化图片缓存函数
                     imagesloadtwo.onload = function(){
                         if(indexnumtwo==numimg+fristnum){
                                     var _htmlalli = ‘‘;
                        //判断是否全部已经加载(显示的数据=剩余的数据刚好相等,显示的数据>与剩余的数据,所以遍历的时候要判断i是否超出剩余条数)
                            if(datalength>fristnum){
                                for(var i=fristnum;i<numimg+fristnum;i++){
                                //如果全部显示完则停止遍历跳出循环;
                                if(i>=datalength){
                                    break;
                                }
                                var _htmlli = "<li><a href=‘‘><img src="+objectresult[i].urlimg+" /></a></li>";
                                _htmlalli +=_htmlli;
                                }
                                fristnum = numimg+fristnum;
                                var testul = ullist;
                                addhtml(_htmlalli,ullist);
                                var    newlitaglength = litagarray.length;
                                for(var i=lilength;i<newlitaglength;i++){
                                     litagheigh.push(litagarray[i].offsetHeight);//新加载数据个模块的高度;
                                }
                                //插入加载的数据并更新更列的高度与前面的插入一样;
                                for(var i=lilength;i<newlitaglength;i++){
                                    var minkey = minheight(rowheight);
                                    litagarray[i].style.top = rowheight[minkey]+‘px‘;
                                    litagarray[i].style.left = minkey*liwidth +‘px‘;
                                    rowheight[minkey] +=litagheigh[i];
                                }
                                lilength = newlitaglength;
                                var thistop = maxheight(rowheight);
                                more.style.top = thistop +‘px‘;
                                }else{
                                    alerts(‘没有更多了‘);//如果点击时已经加载完,则弹出
                                }
                         }else{
                             imageloading();
                         }
                     }
                     if(!objectresult[indexnumtwo]){
                         imagesloadtwo.src="img/11.jpg";
                     }else{
                         imagesloadtwo.src = objectresult[indexnumtwo].urlimg;//缓存图片
                     }
                    indexnumtwo++;
                 })();
            }
       })();
               this.minheight = function(arraymode){
                   return minheight(arraymode);
               }
            //获取最短列的索引
            function minheight(arraymode){
                var minval = arraymode[0];
                var minkey = 0;
                for(var keys in arraymode){
                    if(minval>arraymode[keys]){
                        minval = arraymode[keys];
                        minkey = keys;
                    }
                }
                return minkey;
            }
            //获取最高列的的值
            function maxheight(arraymode){
                var maxval = 0;
                for(var keys in arraymode){
                    if(arraymode[keys]>maxval){
                        maxval = arraymode[keys];
                    }
                }
                return maxval;
            }
            //插入html
            function addhtml(elementhtml,elementenode){
                var newdiv = document.createElement(‘div‘);
                newdiv.innerHTML = elementhtml;
                takehtml = document.createDocumentFragment();//创建一个虚拟的碎片html片段
                while(newdiv.firstChild){
                    takehtml.appendChild(newdiv.firstChild);//取出div中子元素节点,这里有个有意思的地方就是takehtml每插入一个firstchild,div中便少一个;所以takeli中插入的永远是div的第一个
                }
                return elementenode.appendChild(takehtml);
            }
            //弹出提示信息
            function alerts(texts){
                var alerttext = "<p id=‘alerttext‘ style=‘text-align:center;line-height:80px;position:fixed;left:0px;right:0px;margin:40% auto;z-index:1000;width:200px;height:80px;border-radius:8px;background-color:#000;color:#fff;opacity:0.8;‘>"+texts+"</p>"
                  var divalter = document.createElement(‘div‘);
                      divalter.innerHTML = alerttext;
                  var    alterremove = document.getElementById(‘alerttext‘);
                  var    takediv = document.createDocumentFragment();
                      takediv.appendChild(divalter.firstChild);
                      if(!alterremove){//判断是否弹出了信息,没有则显示;
                          document.body.appendChild(takediv);
                          alterremove = document.getElementById(‘alerttext‘);
                          setTimeout(function(){
                              document.body.removeChild(alterremove);
                          },2000)
                      }

                 }
        }
}        

              window.onload =function(){
             loads = new loadingfun();
            loads.loadingimg();
            }
            window.onresize = function(){
                loads = new loadingfun()
                loads.changesize();
            }
</script>
    </body>
</html>
时间: 2024-10-19 09:05:11

瀑布流图片加载的相关文章

js实现瀑布流以及加载效果

一.瀑布流是个啥? 瀑布流,是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 最早采用瀑布流布局的网站是Pinterest,逐渐在国内流行开来,比如我们熟知的百度图片的布局,在"很久"以前,百度图片还是需要一页一页的点击进行查看更多图片,而现在的瀑布流布局使用户查找图片更加方便. 二.瀑布流的优缺点 优点: 1.节省了页面的空间,不再需要导航和页码按钮. 2.增强了用户的体验,使用户的体验更多的是在于浏览图

jQuery8种不同的瀑布流懒加载loading效果

优化图片加载插件jQuery8种不同的瀑布流懒加载loading效果  在线预览 下载地址 实例代码 <ul class="grid effect-1" id="grid"> <li><a href="#"><img src="/api/jq/5733e33ac28cb/images/5.jpg"></a></li> <li><a hre

jQuery瀑布流+无限加载图片

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> * { margin: 0px; padding: 0px; } #contianer { position: relative; font-size: 0; margin: 0 auto; }

[android] 瀑布流布局——分页加载(详细代码)

效果是这个样的: 布局思路: 最外层父窗体是一个RelativeLayout(图里没画出来),从内层开始. 黑色:自定义ScrollView 红色:LinearLayout,为了盛放内层三个布局,orientation为水平. 绿色:三个LinearLayout,用来实现散列的瀑布流效果.orientation为垂直. 间隙:实际不存在,这里只是为了能看清结构. 布局代码: <com.example.stream.SV android:id="@+id/sv" android:l

jquery瀑布流下拉加载(position定位版)

瀑布流的算法一直是迷惑我很久的一个东西,我虽知道原理但自己凭空尝试仍是自己做不来,于是借鉴园子里别人写的代码的思路和自己找的一些关于瀑布流布局的教程,一步步来,终于自己独立做出来了. 本着学习分享为主,只贴出js逻辑部分,布局和css都不发了就. 数据用的:http://www.wookmark.com/api jquery版本:1.9.1 效果图如下: jquery code: 1 <script> 2 $(function(){ 3 /* 4 1.通过可视区域的宽度 除以 每一块的宽度 可

重构项目之二:使用瀑布流效果加载图片

虽然最后这个功能使用了另外的插件,但是还是一下大概的原理吧,还是先上图: 功能描述: 根据不同的菜单的属性分别加载不同的数据 下拉滚动条到一定位置预加载图片,滚动条拉到最底下的时候渲染html: 鼠标移到菜单,切换各个列表图片: 鼠标移到图片上,显示详细信息: 技术实现方案:

基于jquery和knockout.js 写个瀑布流异步加载分页

<div class="list-view"> <ul> <li data-bind="foreach:datalst"> <div class="item border clearfix"> <div class="face fl"> <a target="_blank" data-bind="attr:{'title':user

瀑布流动态加载图片

简要截图: 项目链接:http://pan.baidu.com/s/1pK7foWb密码:epi1 github:https://github.com/shuai7boy/waterFall

74.手机端图片瀑布流的加载代码和效果

http://www.bin012.com/index.php?route=product/product&path=63&product_id=52 原文地址:https://www.cnblogs.com/sqyambition/p/11022935.html