js实现图片懒加载,屏幕自适应

效果图

在这里插入图片描述
屏幕小于1000px时
在这里插入图片描述

代码

<!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>瀑布流</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        body {
            background: #ededed;
        }

        .content {
            width: 1090px;
            height: auto;
            margin: auto;
            background-color: rgb(236, 238, 231);
            position: relative;
            /* border: solid 1px black; */
        }

        img {
            width: 100px;
            box-shadow: 0 0 5px grey;
            position: absolute;
        }
    </style>
</head>
<body>
    <script>
        var img = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg", "11.jpg",
            "12.jpg", "13.jpg", "14.jpg", "15.jpg"
        ];
        //每次加载50张图片
        var num = 50;
        //每行加载的数量 默认一行10张图片
        var hrow = 10;
        //标记当前瀑布流高
        var max = 0;
        
        var content = document.createElement("div");
        content.className = "content";
        document.body.appendChild(content);
        var small = document.getElementsByClassName("smallimg");
        // 数组,存放图片对象
        var lists = [];
        createImages();
        //随机生成50张图片、图片水平位置
        function createImages() {
            for (var i = 0; i < num; i++) {
                var imglist = document.createElement("img");
                imglist.className = "smallimg";
                imglist.src = "images/" + img[Math.floor(Math.random() * img.length)];
                //left
                imglist.style.left = i % hrow * 100 + i % hrow * 10 + "px";
                content.appendChild(imglist);
                lists.push(imglist);
            }
        }
        //屏幕大小变化时
        window.onresize = function () {
        //可视宽
            var sw = document.documentElement.clientWidth;
            if (sw < 1000) {
                hrow = 5;
                content.style.width = "540px";
                //屏幕大小一旦小于1000,就固定在当前加载状态,图片不随着页面的变化而随机变化
                //this.οnresize=null;
            } else {
                hrow = 10;
                //在屏幕大小变化的时候,content一直居中   行内样式优先级高于内嵌样式,设置行内样式,使content拥有宽,从而使margin:auto其作用
                content.style.width="1090px";
            }
            //清空当前内容
            content.innerHTML = "";
            //重新加载
            createImages();
            setOffsetT(0);
        }
        
        window.onload = function () {
            setOffsetT(0);
            //绑定一个滚动事件
            this.addEventListener("scroll", function (e) {
                if (this.scrollY + document.documentElement.clientHeight >= document.body.offsetHeight -
                    20) {
                    createImages();
                    setOffsetT(lists.length - num);
                }
            })
        }
        function setOffsetT(start) {
            for (var i = start; i < lists.length;i++) {
                //top
                var offsettop = i >= hrow ? lists[i - hrow].offsetHeight + lists[i - hrow].offsetTop + 10 : 0;
               lists[i].style.top = offsettop + "px";
                if (max < offsettop + lists[i].offsetHeight) {
                    max = offsettop + lists[i].offsetHeight;
                }
            }
            content.style.height = max + "px";
        }
    </script>
</body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值