/Waterfall

瀑布流

Primary LanguageJavaScript

Waterfall

瀑布流

#需求分析 参考目前流行的购物网站,设计一个图片无限加载的功能

使用原生的javascript进行开发

#设计开发 先把部分图片放在页面上

在通过CSS样式给图片设置样式

.box{ padding: 15px 0 0 15px; float: left; }

.pic{ padding: 10px; border: 1px solid #000000; border-radius: 5px; box-shadow: 0 0 5px #000000; }

.pic img{ width: 165px; height: auto; }

#JS代码

定义一个函数来获取class为box的元素

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 checkScrollSlide(){
    var oParent=document.getElementById('main');
    var aBox=getByClass(oParent,'box');
    var lastBoxH=aBox[aBox.length-1].offsetTop+Math.floor(aBox[aBox.length-1].offsetHeight/2);//创建【触发添加块框函数waterfall()】的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载)
    var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//有标准模式和混杂模式,注意解决兼容性
    var documentH=document.documentElement.clientHeight||document.body.clientHeight;//页面高度
    return (lastBoxH<scrollTop+documentH)?true:false;//到达指定高度后 返回true,触发waterfall()函数
}

获取每一行图片高度最小的那一张

function getMinhIndex(arr,val){
    for(var i in arr){
        if(arr[i] == val){
            return i;
        }
    }
}

主函数

function waterfall(parent,box){
    //将main下所有class为box的元素取出来
    var oParent = document.getElementById(parent);
    //由于其他地方也要用到去box,所以把它封装为一个函数
    var oBoxs = getByClass(oParent,box);
    //console.log(oBox.length);

    //计算整个页面显示的列数(页面宽/盒子宽)
    var oBoxW = oBoxs[0].offsetWidth;//因为等宽的,只需获取第一个就行
    //alert(oBoxW);
    var cols = Math.floor(document.documentElement.clientWidth/oBoxW);
    //因为main随着浏览器大小在变化,所以要设置一下宽度
    oParent.style.cssText = 'width:'+oBoxW*cols+'px;margin:0 auto;';

    var hArr = [];
    for(var i= 0;i<oBoxs.length;i++){
        if(i<cols){
            hArr.push(oBoxs[i].offsetHeight);
        }else{
            var minH = Math.min.apply(null,hArr);
            var index = getMinhIndex(hArr,minH);
            oBoxs[i].style.position = "absolute";
            oBoxs[i].style.top = minH+"px";
            //oBoxs[i].style.left = oBoxW*index+"px";
            oBoxs[i].style.left = oBoxs[index].offsetLeft+"px";
            hArr[index]+=oBoxs[i].offsetHeight;
        }
    }
}

预加载的图片

    var dataInt={'data':[{'src':'24.jpg'},{'src':'25.jpg'},{'src':'26.jpg'},{'src':'27.jpg'},{'src':'28.jpg'},{'src':'29.jpg'},{'src':'30.jpg'},{'src':'31.jpg'},{'src':'32.jpg'},{'src':'33.jpg'},{'src':'34.jpg'},{'src':'35.jpg'},{'src':'36.jpg'},{'src':'37.jpg'},{'src':'38.jpg'},{'src':'39.jpg'},{'src':'40.jpg'},{'src':'41.jpg'},{'src':'42.jpg'},{'src':'43.jpg'},{'src':'44.jpg'},{'src':'45.jpg'},{'src':'46.jpg'},{'src':'47.jpg'},{'src':'48.jpg'},{'src':'49.jpg'},{'src':'50.jpg'},{'src':'51.jpg'},{'src':'52.jpg'},{'src':'53.jpg'},{'src':'54.jpg'},{'src':'55.jpg'},{'src':'56.jpg'},{'src':'57.jpg'},{'src':'58.jpg'},{'src':'59.jpg'},{'src':'60.jpg'},{'src':'61.jpg'},{'src':'62.jpg'},{'src':'63.jpg'},{'src':'64.jpg'},{'src':'65.jpg'},{'src':'66.jpg'},{'src':'67.jpg'},{'src':'68.jpg'},{'src':'69.jpg'},{'src':'70.jpg'},{'src':'71.jpg'},{'src':'72.jpg'},{'src':'73.jpg'},{'src':'74.jpg'},{'src':'75.jpg'},{'src':'76.jpg'},{'src':'77.jpg'},{'src':'78.jpg'},{'src':'79.jpg'},{'src':'80.jpg'},{'src':'81.jpg'},{'src':'82.jpg'},{'src':'83.jpg'},{'src':'84.jpg'},{'src':'85.jpg'},{'src':'86.jpg'},{'src':'87.jpg'},{'src':'88.jpg'},{'src':'89.jpg'},{'src':'90.jpg'},{'src':'91.jpg'},{'src':'92.jpg'},{'src':'93.jpg'},{'src':'94.jpg'},{'src':'95.jpg'},{'src':'96.jpg'},{'src':'97.jpg'}]};
'''