美文网首页
js 图片瀑布流

js 图片瀑布流

作者: Peter_2B | 来源:发表于2022-03-03 15:39 被阅读0次

    思路:

    • html循环展示即可,只需对图片absolute的左边距和上边距操作;
    • 声明一个数组,若展示5列图片,就只有5个值,这5个值是第一行的5张图片高度的值,当展示第6/N图片时,第6/N张图片会展示在最小值得那一列, 当前图片的高度与数组内最小值累加;
    (function(){
        
        var allItems = document.getElementsByClassName('wf-item');
        var arr = [];
    
        var init = function () {
            setImgPos();
        }
    
        function setImgPos(){
            
            for(var i = 0; i < allItems.length; i++){
                var item = allItems[i];
                //232px如何求得:
                //1200px宽度 - 40px(5列共4个10px空隙), 再除以5份图宽度 = 232px
                item.style.width = '232px';             //图片宽度固定,高度自适应
    
                if(i < 5){  //设置第一行
                    arr.push( item.offsetHeight );      // 设置首行5张图所处位置
                    item.style.top = '0px';             // 它们高度都是0px
                    
                    if( (i+1) % 5 === 1 ){              // 第一行的第1张图片的左边距
                        item.style.left = '0px';
                    }else{
                        item.style.left = i * (232 + 10) + 'px';  // 第一行的第2、3、4、5列的图片左边距 (图片宽度 + margin边距)
                    };
                }else{     //设置第N行
    
                    // 如第6张图片时,getMinIdx函数获取到前5张图片的最小高度的下标;
                    var minIdx = getMinIdx(arr);
    
                    // 第6张图所处的left位置就是在 前5图最小高度图片的下面(前5上已经设置了left),top高度就是图片的高度+10margin;
                    item.style.left = allItems[minIdx].offsetLeft + 'px';
                    item.style.top = ( arr[minIdx] + 10 ) + 'px';
    
                    // 最后再给前5的数组,当前操作的下标下, 更新加入的图片的高度
                    arr[minIdx] = arr[minIdx] + ( item.offsetHeight + 10 );
                }
    
            }
        }
    
        // 获取数组中最小值的下标位置;
        function getMinIdx(arr){
            var min = Math.min(...arr);
            return arr.indexOf(min);
        }
    
        window.onload = function () {
            init();
        }
    
    })()
    
    .wrap{
        position: relative;
        width: 1200px;
        margin: 0 auto;
    }
    .wf-item{
        position: absolute;
        background-color: orange;
        overflow: hidden;
    }
    .wf-item img{
        display: block;
        width: 100%;
    }
    

    相关文章

      网友评论

          本文标题:js 图片瀑布流

          本文链接:https://www.haomeiwen.com/subject/wwazbltx.html