js/jQuery实现瀑布流

2020-02-16  本文已影响0人  4VZhang

html中主要代码:

<body>
 <div id="main">

        <div class="box">
            <div class="pic">
                <img src="imgs/0.jpg">
            </div>
        </div>
        <div class="box">
            <div class="pic">
                <img src="imgs/1.jpg">
            </div>
 </div>

    <!--引入js-->
    <script src="js/index.js" type="application/javascript"></script>
</body>

实现瀑布流的js代码:

function waterFall(parent,box) {

    // 屏幕宽度
    var screenWidth = document.body.offsetWidth;

    // 获取所有的box
    var allBox = $('main').getElementsByClassName('box');
    // 单个box的宽度
    var boxWidth = allBox[0].offsetWidth;

    // 计算能容纳下几列
    var colum = Math.floor(screenWidth / boxWidth);


    $(parent).style.width = colum * boxWidth + 'px';
    $(parent).style.margin = '0 auto';
    // 初始化数组,储存每一列的高度
    var  heightArr = [];


    for (var i=0; i<allBox.length;i++) {
        // 储存第一行的高度
        if (i < colum) {
            heightArr.push(allBox[i].offsetHeight);

        }else  {// 获取数组中高度最小的,增加;

            var min = Math.min.apply(this,heightArr);
            var minIdx = indexForArr(heightArr,min);
            // console.log(heightArr);
            // console.log(minIdx+'----'+ min);

            // 布局当前box的
            allBox[i].style.position = 'absolute';// 绝对布局
            allBox[i].style.left = boxWidth * minIdx + 'px';
            allBox[i].style.top = min + 'px';
            // console.log(boxWidth*minIdx+'px');
            // console.log(min +'px');
            // 更新数组中当前索引值对应的value
            heightArr[minIdx] += allBox[i].offsetHeight;
        }
    }
}

css实现瀑布流只需要三行代码:

    /*css,多栏布局 达到瀑布流的效果!!!*/
    -webkit-column-width: 202px;
    column-width: 202px;
    -moz-column-width: 202px;

实现下拉刷新的js代码:

 window.onscroll = function () {
        if (checkLoadMore()){
            var datas = {'dataimg':[{'img':'1.jpg'},{'img':'1.jpg'},
                {'img':'18.jpg'},{'img':'16.jpg'},
                {'img':'17.jpg'},{'img':'19.jpg'},
                {'img':'20.jpg'},{'img':'22.jpg'}]};

                for (var i = 0 ; i < datas.dataimg.length;i++) {
                    var newbox = document.createElement('div');
                    newbox.className = 'box';
                    $('main').appendChild(newbox);

                    var newpic = document.createElement('div');
                    newpic.className = 'pic';
                    newbox.appendChild(newpic);

                    var newImg = document.createElement('img');
                    newImg.src =  'imgs/'+ datas.dataimg[i].img;
                    newpic.appendChild(newImg);
                }

            waterFall('main','box');
        }

js/css实现瀑布流代码
jQuery实现代码

上一篇下一篇

猜你喜欢

热点阅读