zoukankan      html  css  js  c++  java
  • Jquery瀑布流效果(下篇)

    接着上篇瀑布流效果说(上篇地址为http://www.cnblogs.com/jiaojiaome/articles/4123586.html)。

    第一个文件myself实现了瀑布流的效果,但是存在可以优化的地方。
    比如initial方法,第一次刚加载的时候调用initial方法从第一张慢慢布局是没有问题的。
    but,后面拖动滚动后,如果满足条件,继续加载其他的,加载毕后再次调用initial()方法,
    这里是可以优化的,因为之前的元素已经布局好了,不需要重新布局。所以可以从后面的元素开始
    本篇遂是优化后的结果。

    所以优化了下initial方法,给它一个参数,如果参数存在就布局参数里的元素,否则则布局$("#wrap .box").

    代码如下:

    <!DOCTYPE html>
    <html >
    <head>
    <meta charset="gb2312" />
    <title>myself瀑布流效果———优化后</title>
    <script type="text/javascript" src="../js/jquery.js"></script>
    <style type="text/css">
    #wrap{position:relative;}
    #wrap .box {
        float: left;
        height: auto;
        padding: 10px;
        width: 280px;
    }
    
    #wrap .box .info {
        background:none #fff;
        border-radius: 8px;
        box-shadow: 0 0 11px #666666;
        height: auto;
        width: 280px;
    }
    #wrap .box .info .pic {
        height: auto;
        margin: 0 auto;
        padding-top: 10px;
        width: 260px;
    }
    #wrap .box .info .pic img {
        border-radius: 3px;
        width: 260px;
    }
    
    #wrap .box .info .title {
        color: #666;
        font-size: 18px;
        font-weight: bold;
        height: 40px;
        line-height: 40px;
        margin: 0 auto;
        overflow: hidden;
        text-align: center;
        width: 260px;
    }
    #wrap .box .info .title a{
    color:#444;
    text-decoration:none;
    }
    </style>
    </head>
    <body>
        <div id="wrap">
        
            <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/1.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
            
            <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/2.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
            
            <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/3.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
            
            <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/4.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
            <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/5.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
            <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/6.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
        <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/7.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
                <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/8.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
    <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/9.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
        <div class="box">
                <div class="info">
                    <div class="pic"><img src="images/10.jpg"></div>
                    <div class="title"><a href="http://www.sucaijiayuan.com">素材家园-sucaijiayuan.com</a></div>
                </div>
            </div>
        </div>
    </body>
    
        <script type="text/javascript">
            /*第一个文件myself实现了瀑布流的效果,但是存在可以优化的地方。
        比如initial方法,第一次刚加载的时候调用initial方法从第一张慢慢布局是没有问题的。
        but,后面拖动滚动后,如果满足条件,继续加载其他的,加载毕后再次调用initial()方法,
        这里是可以优化的,因为之前的元素已经布局好了,不需要重新布局。所以可以从后面的元素开始
        本篇遂是优化后的结果。*/
        var hArray=[];
        var datas=[{"src":"1.jpg","txt":"美女图片1"},
                    {"src":"2.jpg","txt":"美女图片2"},
                    {"src":"3.jpg","txt":"美女图片3"},
                    {"src":"4.jpg","txt":"美女图片4"},
                    {"src":"5.jpg","txt":"美女图片5"},
                    {"src":"6.jpg","txt":"美女图片6"},
                    {"src":"7.jpg","txt":"美女图片7"},
                    {"src":"8.jpg","txt":"美女图片8"},
                    {"src":"9.jpg","txt":"美女图片9"},
                    {"src":"10.jpg","txt":"美女图片10"}];
         initial();
        /*$("window").on("load",function(){
            //首次布局
            initial();
        })*/
        $(window).scroll(function(){
    
            if(scrollCommanded()){
            var objArr=[];
                for(var i=0;i<30;i++){
                    var index=Math.floor(Math.random()*10);//产生1到9的随机数
                    var box=document.createElement("div");
                    box.className="box";
                    var info=document.createElement("div");
                    info.className="info";
                    var pic=document.createElement("div");
                    pic.className="pic";
                    var img=document.createElement("img");
                    img.src="images/"+datas[index].src;
                    pic.appendChild(img);
                    var title=document.createElement("div");
                    title.className="title";
                    title.innerHTML='<a href="#">'+datas[index].txt+'</a>';
                    info.appendChild(pic);
                    info.appendChild(title);
                    box.appendChild(info);
                    document.getElementById("wrap").appendChild(box);
                    objArr.push(box);
                }
                initial(objArr);
            }
        })
        //判断是否具备滚动的条件
        function scrollCommanded(){
            var last=$("#wrap .box").last();
            if($(window).height()+$(window).scrollTop()>last.offset().top+Math.floor(last.outerHeight()/2)){
                return true;
            }
            return false;
        }
        //初始化布局
        
        function initial(objArra){
            var boxes=objArra||$("#wrap .box"),
                boxW=objArra?boxes[0].offsetWidth:boxes.eq(0).outerWidth(),
                cols=Math.floor($(window).width()/boxW);
            $("#wrap").width(cols*boxW).css("margin","0 auto");
            if(hArray.length==0){
                boxes.each(function(index,value){
                    if(index<cols){
                    hArray.push($(value).outerHeight());
                    }else{
                        var minH=Math.min.apply(null,hArray);
                        var minIndex=$.inArray(minH,hArray);
                        $(value).css({
                        "position":"absolute",
                        "top":minH,
                        "left":minIndex*boxW}
                        );
                        hArray[minIndex]+=$(value).outerHeight();
                    }
                })
            }else{
                $(boxes).each(function(index,value){
                        var minH=Math.min.apply(null,hArray);
                        var minIndex=$.inArray(minH,hArray);
                        $(value).css({
                        "position":"absolute",
                        "top":minH,
                        "left":minIndex*boxW}
                        );
                        hArray[minIndex]+=$(value).outerHeight();
                })
            }
            
            
        }
    </script>
    </html>

    完结了。

    人生短短几十年,要在有限的生命里多做店有意义的事情。莫要让自己迎合别人的眼光活着。随心而为,听从心的声音。讨好自己,悠哉悠哉!
  • 相关阅读:
    kvm虚拟化存储管理
    k8s集群部署
    docker版的zabbix部署
    docker进阶——数据管理与网络
    docker基础
    ceph对接openstack环境
    java命令--jmap命令使用
    JVM性能分析工具jstack介绍
    SkipList跳表基本原理
    NIO之Channel、Buffer
  • 原文地址:https://www.cnblogs.com/jiaojiaome/p/4123600.html
Copyright © 2011-2022 走看看