问答详情
源自:3-1 jQuery实现瀑布流布局图片定位

用JS跟着老师一步步写下来,编译通过可是瀑布流效果没出来,搞不懂问题出哪儿了

// JavaScript Document
window.onload=function(){
    waterfall('main','box');
    //假设这是后台给的数据块
    var dataint={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'},{'src':'5.jpg'}]}
    window.onscroll=function(){
        if(checkScrollSlide()){
            var oparent=document.getElementById('main');
            //如果条件为真,则将数据块渲染到页面尾部
            for(var i=0;i<dataint.data.length;i++){
                 var obox=document.createElement('div');
                 obox.className='box';
                 oparent.appendChild(obox);
                 var opic=document.createElement('div');
                 opic.className='pic';
                 obox.appendChild(opic);
                 var oimg=document.createElement('img');
                 oimg.src='images/'+dataint.data[i].src;
                 opic.appendChild(oimg);
                }
                waterfall('main','box');
            }
        }
    }
            
function waterfall(partent,box){
    //将main下面所有class为box的元素取出来
    var oparent=document.getElementById(parent);
    var boxs=getByClass(oparent,box);
    //计算整个页面显示的列数(页面宽度/box的宽度)
    var boxwidth=boxs[0].offsetWidth;
    var cols=Math.floor(document.documentElement.clientWidth/boxwidth);
    //设置main的宽度
    oparent.style.cssText='width:'+boxwidth*cols+'px;margin:0 auto;';
    var heightarr=[];
    for(var i=0; i<boxs.length; i++){
        if(i<cols){
            heightarr.push(boxs[i].offsetHeight);
            }else{
                var minh=Math.min.apply(null,heightarr);
                var index=getminhindex(heightarr,minh);
                boxs[i].style.position='absolute';
                boxs[i].style.top=minh+'px';
                boxs[i].style.left=boxwidth*index+'px';
                heightarr[index]=minh+boxs[i].offsetHeight;
            }
        }
    }
    function getByClass(parent,clsname){
        var boxarr=new Array(),//用来存储将来所有class为box的元素
            oelements=parent.getElementsByTagName('*');
        for(var i=0; i< oelements.length; i++){
             if(oelements[i].className==clsname){
              boxarr.push(oelements[i]);
            }    
        }
      return boxarr;    
    }
    function getminhindex(arr,val){
        for(var i in arr){
            if(arr[i]==val){
            return i;
            }
          }
        }
    //检测是否具备加载数据块的条件    
    function checkScrollSlide(){
        var oparent=document.getElementById('main');
        var oboxs=getByClass(oparent,'box');
        var lastboxh=oboxs[oboxs.length-1].offsetTop+Math.floor(oboxs[oboxs.length-1].offsetHeight/2);
        //获取滚动条滚动高度,在混杂模式下用body,在标准模式下documentElement
        var scrolltoph=document.body.scrollTop || document.documentElement.scrollTop;
        //接下来获取浏览器窗口高度
        var height=document.body.clientHeight || document.documentElement.clientHeight;
        return (lastboxh<height+scrolltoph)?true:false;
        }   

提问者:qq_17w 2016-09-13 15:29

个回答

  • qq_17w
    2016-09-13 18:48:25

               
    function waterfall(partent,box)这句中的parent打错了  改过来就可以实现效果

    自己检查了好多遍  终于有结果了 很开心