瀑布流

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            background-color: #dedede;
            margin: 0;
            padding: 0;
        }

        .pubu-container {
            width: 80%;
            margin: 0 auto;
            border: 1px solid red;
            display: flex;
            /* 方向 */
            flex-direction: row;
            /* 可以理解成float:left;  */

        }

        .pubu-container .item {
            /* 弹性项的占比 */
            flex: 1;
            margin: 15px;
            /* border: 1px solid red; */
        }

        .pubu-container .item img {
            width: 100%;
            border: 10px solid white;
            transition: all 0.3s ease-in-out;

        }

        .pubu-container .item img:hover {
            cursor: pointer;
            box-shadow: 0px 3px 2px 1px #999;
            transform: scale(1.02);
            /*  变大1.1倍 */


        }
    </style>
</head>

<body>
    <div class='pubu-container'>
        <div class="item" id='pb-1'>
        </div>
        <div class="item" id='pb-2'>
        </div>
        <div class="item" id='pb-3'>
        </div>
        <div class="item" id='pb-4'>
        </div>

    </div>

    <script>
        //初始化大小:即屏幕默认大小
        var windowHeight = window.screen.height + 500;
        //记录图片加载数量
        var imgId = 0;

        window.onload = function () {
           insertImg();
           //监听滚动事件
            window.document.addEventListener('scroll',function(){
                console.log(1);
                //滚动上去的高度(已经滚动的高度) + 当前可视屏幕的高度(即窗口的高度) > 滚动条能够滚动的最大高度
                if(document.documentElement.scrollTop+window.screen.height>document.documentElement.scrollHeight){
                    //当再次加载图片时,需要改变预期设定的高度即初始化高度:windowHeight
                    windowHeight += 500;
                    insertImg();
                }
            })

        }

        //插入图片
        var insertImg = function(){
            var time = setInterval(() => {
                if (document.documentElement.scrollHeight > windowHeight) {
                    clearInterval(time);
                }

                var mDiv = minDiv();
                console.log(mDiv);

                //插入图片
                imgId++;
                if (imgId > 8) {
                    imgId = 1;
                }
                var img = document.createElement('img');
                img.setAttribute('src', '../images/' + imgId + '.png');
                mDiv.appendChild(img);   //相当于发出一个指令:我要插图,但是浏览器的渲染还没有完成

            }, 100);
        }


        // 1、计算最小列
        var minDiv = function () {
            //利用弹性布局设置四列,分别得到这四个div父元素
            var pb1 = document.getElementById('pb-1');
            var pb2 = document.getElementById('pb-2');
            var pb3 = document.getElementById('pb-3');
            var pb4 = document.getElementById('pb-4');

            //得到每一列中包含的子图片集
            var imgs_1 = pb1.children;
            var imgs_2 = pb2.children;
            var imgs_3 = pb3.children;
            var imgs_4 = pb4.children;

            //调用方法计算出每一列图片的总高度,用途:为计算出这四项的最小高度以插入图片
            var img1Height = jisuan(imgs_1);
            var img2Height = jisuan(imgs_2);
            var img3Height = jisuan(imgs_3);
            var img4Height = jisuan(imgs_4);

            console.log(img1Height, img2Height, img3Height, img4Height);

            //利用Math计算出最小高度
            var minHeight = Math.min(img1Height, img2Height, img3Height, img4Height);

            //将最小高度与每一列的高度进行比对,并返回最小高度所在列即div元素
            if (minHeight === img1Height) {
                return pb1;
            }
            if (minHeight === img2Height) {
                return pb2;
            }
            if (minHeight === img3Height) {
                return pb3;
            }
            if (minHeight === img4Height) {
                return pb4;
            }


        }
        //该方法用于计算某一列图片的总高度
        var jisuan = function (pbimgs) {
            //当某一列图片不存在时,直接返回0即可
            if (pbimgs === null || pbimgs.length === 0) {
                return 0;
            } else {
                var height = 0;
                //循环遍历该列的图,累加这些图的高度
                for (var i = 0; i < pbimgs.length; i++) {
                    var img = pbimgs[i];
                    var h = img.height;
                    height += h;
                }
                return height;
            }

        }



    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android瀑布流是一种常用于展示图片、新闻、商品等多个数据的界面布局方式。它的特点是让数据以瀑布的形式在屏幕上卡片化展示,每个卡片的高度可以不同,整体呈现出瀑布流的效果。 使用Android瀑布流可以在有限的屏幕空间内展示更多的内容,并且能够更好地适应不同屏幕尺寸和分辨率。它能够自动适应数据的长度和高度,使得用户观看时可以自由滑动和查看更多的内容,提升了用户的体验。 在Android中实现瀑布流布局可以采用RecyclerView或GridView等布局控件,并结合Adapter来添加数据和设置布局样式。通常情况下,我们需要自定义Adapter来实现特定的布局效果,比如设置不规则的卡片高度、加载图片、设置点击事件等。 瀑布流的实现方式有多种,常见的是通过计算每个卡片的高度来实现。在RecyclerView中,可以使用StaggeredGridLayoutManager来实现瀑布流布局,通过设置ItemDecoration来控制卡片之间的间距。 在实际开发中,需要考虑到瀑布流的性能问题,因为加载大量的图片可能会造成卡顿和内存溢出。可以采用图片加载库如Glide或Picasso来处理图片加载,并且可以使用分页加载的方式,只加载当前可见区域的数据,减少资源消耗。 总之,Android瀑布流是一种能够有效展示多个数据的布局方式,可以提升用户体验,但在开发过程中需要注意性能问题,并选择合适的第三方库来处理图片加载

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值