js实现瀑布流效果

  • 瀑布流的特点:宽度确定,高度不确定;通过定位处理的。
  • 每一行添加在高度最低的下面
  • 绝对定位
    • left:图片的宽度*索引
    • top:最小的高度
  • 创建一个数组
  • 浏览器可视区域的宽度/图片的宽度=列数
  • html代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>js实现瀑布流</title>
        <style>
            .box{
                position: relative;
            }
            .box .item{
                position: absolute;
                width: 200px;
                margin: 5px;
                transition: all 1s; 
                border:1px solid #ccc;
                
            }
            .box .item img{
                width: 100%;
                height: 100%;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item"><img src="image/1.jpeg" alt="" /></div>
            <div class="item"><img src="image/1.jpg" alt="" /></div>
            <div class="item"><img src="image/2.jpg" alt="" /></div>
            <div class="item"><img src="image/3.jpg" alt="" /></div>
            <div class="item"><img src="image/4.jpg" alt="" /></div>
            <div class="item"><img src="image/5.jpg" alt="" /></div>
            <div class="item"><img src="image/6.jpg" alt="" /></div>
            <div class="item"><img src="image/7.jpg" alt="" /></div>
            <div class="item"><img src="image/8.jpg" alt="" /></div>
            <div class="item"><img src="image/9.jpg" alt="" /></div>
        </div>
    </body>
</html>
  • js代码
script src="jquery-3.1.1.min.js"></script>
<script type="text/javascript">
    $(function(){
//      浏览器窗口发生变换的时候 重新加载
        $(window).resize(function () {
            init();
        })
        init();
        function init(){
            //width()  不包括 margin/padding/border
            //outerWidth(true) 包括padding/border  加参数true 能获取到argin
            var itemWidth=$(".item").outerWidth(true);//每个图片的宽度
            //console.log(itemWidth)
            var cols=parseInt($(window).width()/itemWidth);//浏览器的宽度/图片的宽度=列数
            var heightArr=[];//创建一个存放每个图片的高度的数组
            for(var i =0;i<cols;i++){ //每个数组的长度就是 列数的长度  
                heightArr.push(0);//最开始的时候可以默认高度是0;【,0,0】
            }
            //循环每一条图片
            $('.item').each(function(index,item){
                var idex=0;//初始索引为0
                var minHeight=heightArr[0];//初始设置最小高度是数组的第一个
                for(var i=0;i<heightArr.length;i++){
                    if(heightArr[i]<minHeight){//判断数组中的每一个是否比默认设置的最小高度小,小于直接赋值给最小高度
                        minHeight=heightArr[i];//最小高度
                        idex=i;//当前索引 
                    }
                }
                //设置每个图片的样式
                $(item).css({
                    left:itemWidth*idex,//图片距离左边的位置 就是当前图片的宽度*他的索引
                    top:minHeight //图片距离顶部的位置就是最小高度
                })
                heightArr[idex]+=$(item).outerHeight(true); //高度对应的索引值就是当前图片高度的值
            })  
        }
        
    })
</script>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 盗用的效果图 效果分析 瀑布流中图片的宽度都是固定的,但是高度需要设置为auto以使图片不变形,高度不固定。首先想...
    nojsja阅读 1,030评论 0 0
  • 实现目标:实现瀑布流布局、当滚动条滚动到一定距离时加载图片瀑布流布局:结合窗口改变 定位第一行的盒子 第二行第一...
    前端毛毛阅读 913评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,263评论 1 92
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,294评论 3 119
  • 时光如水 总是无言 虽然不能在最好的时光遇见你 但希望遇见你之后都是最好的时光 不管爱情还是友情 最终的目的都不是...
    美文小屋阅读 523评论 0 0

友情链接更多精彩内容