美文网首页
原生js的瀑布流写法

原生js的瀑布流写法

作者: Aleph_Zheng | 来源:发表于2017-08-07 11:25 被阅读47次

以下是一种原生js的瀑布流写法,或许具体实现过程需要慢慢尝试,但是这种思想很重要。
就是对每张图片执行一个循环,在每一行寻找最小的高度,然后将这张图片插入这个最小高度的下方。

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .ct img{
            width: 200px;
            position: absolute;
            transition: all 1s;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div class="ct">
        <div><img src="http://img.hb.aicdn.com/c54df45fba647c28238ede4ebc825d616ce4b8092cb8c-qAUHgv_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/7303810ccf5fa649db989686df95e9ef846aa7e551a92-z1cKrX_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/6c2475d288fca58ff08fc7f2f82dc9c672daddea4e9d8-DAOUW2_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/c1d1554c408f0d597594be7cffece8e06612f4cc1f229-BM4UKl_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/5f73909e54bd694712a4f1bf546ecc37bca074db5db84-rsAmm6_fw658" alt=""></div>
        <div><img src="http://img2.ph.126.net/RkglLXE3wJUgNOofthFUPg==/6631452594769719407.jpg" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/46fdc28bb3442090fa090e3e46f9839ccf1cb83a2d32f-vr95n0_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/f6c625b54b8328ceddff1c55d5a00007c438c6f796f18-OEhi5v_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/b84fc8c7a532fb5b3a5298c8052b9e097c8433e860438-shRN54_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/a4d63dc50abb07377aee13b540bf95a0f1badb6630aa0-L3W94R_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/54a4df446927e9318a0ffd61b54dca67c331a12e241c1-uhvNhf_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/ac1f108db09c28b2a3ad6d03331abec5c21dc8aeca393-47vMPl_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/fe96c8841043f5b8155eec3b36c57657ba9641c914faa-tSgXZ9_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/a5a081d02d674e59c23a48bea9e2f065a4bfdf0c2c855-dZKIMk_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/2a4e698aaa7d1817d52dd172aeda54a6e7a319f9894e7-L7DdFX_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/901fff0b07b7c28f6076d788bca5a7871f5521ca6cda8-lUMBNj_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/725d96417c2148d03b35424454a244ea9bff80e47d425-nH8YMS_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/fde7f978c9bd5905ed5a2fb85050dc7ce9b4a82f4915e-mQaqFx_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/87dad464f1d7a12aca4a9d537455c5a48ba763941a4403-QRNICb_fw658" alt=""></div>
        <div><img src="http://img.hb.aicdn.com/fdfe55280dc189464cc7b8955cd9882b20523c20a34d7-Gontek_fw658" alt=""></div>
    </div>

    //引入jquery
    <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>
    <script type="text/javascript">
    //页面打开时先执行一次布局
    waterfall();
    //页面尺寸变化时再重新布局
    $(window).on('resize',function(){
        waterfall();
    });
    function waterfall(){
        var $items = $('.ct img');
        var itemWidth = $items.outerWidth(true);
        var colLength = parseInt($(window).width()/itemWidth);
        var arr = [];
        for (var i = 0; i < colLength; i++) {
            arr[i] = 0;
        }

        $items.each(function(){
        //图片加载完的直接布局,没加载完的等到加载完再布局,防止高度计算错误。
            if(this.complete){
                layout(this);
            }else{
                $(this).on('load',function(){
                    layout(this);
                })
            }
        })

        function layout(ele){
            var minHeight= Math.min.apply(null,arr);
            var minIndex= arr.indexOf(minHeight);   
            $(ele).css({
                top: arr[minIndex],
                left: $(ele).outerWidth(true) * minIndex
            })
            arr[minIndex] += $(ele).outerHeight(true);  
        }
    }
    

效果图:

image.png

相关文章

  • 原生js的瀑布流写法

    以下是一种原生js的瀑布流写法,或许具体实现过程需要慢慢尝试,但是这种思想很重要。就是对每张图片执行一个循环,在每...

  • WKWebView与vue.js的交互

    原生调用js的方法 js写法 Swift写法 js调用原生的方法 js写法 Swift写法 1.创建和设置JSOb...

  • 原生js实现瀑布流

    浏览网页的时候经常会遇到瀑布流布局的网站。也许有些读者不了解瀑布流。瀑布流,又称瀑布流式布局。是比较流行的一种网...

  • 原生js瀑布流代码

  • 原生js之瀑布流

    我们已经总结出了瀑布流式布局的两大特征: 内容框宽度固定,高度不固定。 内容框从左到右排列,一行排满后,其余内容框...

  • Js实现瀑布流

    1.使用原生js实现瀑布流效果,demo地址(https://xukeler.github.io/waterfal...

  • 原生js写的瀑布流

    这里只写了js和css方法,大家有兴趣可以动手写写

  • 原生js实现瀑布流效果

    实现目标:实现瀑布流布局、当滚动条滚动到一定距离时加载图片瀑布流布局:结合窗口改变 定位第一行的盒子 第二行第一...

  • 原生Js实现瀑布流效果

    盗用的效果图 效果分析 瀑布流中图片的宽度都是固定的,但是高度需要设置为auto以使图片不变形,高度不固定。首先想...

  • js forEach map &&&

    原生JS forEach()和map()遍历的区别以及兼容写法 一、原生JS forEach() 和map()**...

网友评论

      本文标题:原生js的瀑布流写法

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