js预加载和滚动到底部加载数据实现

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

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            ul {
                min-height: 500px;
                position: relative;
                margin: 0 auto;
            }

            ul li {
                float: left;
                padding: 5px;
                list-style: none;
            }

            ul li img {
                width: 200px;
                border: 1px solid #ccc;
                border-radius: 10px;
                padding: 10px;
            }
        </style>
        <script src="./myjson.js"></script>
    </head>

    <body>
        <ul id="myList"></ul>

        <script>
            let ul = document.querySelector('ul')

            let tableData = JSON.parse(JSON.stringify(imglist)).slice(0, 20)


            render(tableData)
            // 预加载 需要一个默认图片

            function render(data) {
                let str = ''
                data.forEach((item, index) => {
                    // console.log(item)
                    str +=
                        `<li><img  class='img-item${index}' src='./default.jpg'  /></li>`
                });
                ul.innerHTML = str
                setTimeout(() => {
                    loopload(data)
                })
            }

            // 预加载函数  

            function loopload(data, i = 0) {
                // 获取当前这条数据
                let it = data[i]
            
                if (it) {
                    // 创建img标签
                    let img = new Image()
                    // 设置src 缓存
                    img.src = it.src
                    // 图片加载完成以后 缓存结束 那么就应该设置到页面当中
                    img.onload = () => {
                        document.querySelector(`.img-item${i}`).src = it.src
                        loopload(data, i + 1)

                    }

                }
            }
           //滚动到底部加载数据关键在于获取scrollTop,scrollHeight,clientHeight,监听到底部后就数据添加或者截取总数据,然后渲染
            let num = 20
            window.onscroll = () => {
                let nowTop = document.documentElement.scrollTop
                let maxTop = document.documentElement.scrollHeight
                let clientHeight = document.documentElement.clientHeight
                //  console.log(nowTop+clientHeight,maxTop )

                if (nowTop + clientHeight >= maxTop) {
                    num += 10
                    console.log('你改加载更多数据了')
                    let data = imglist.slice(num - 10, num)
                    moreRender(data)

                }

            }

            function moreRender(data) {
                let str = ''
                let num = tableData.length
                data.forEach((item, index) => {
                    // console.log(item)
                    str +=
                        `<li><img  class='img-item${tableData.length + index}' src='./default.jpg' /></li>`
                });

                ul.innerHTML += str


                tableData = [...tableData, ...data]

                setTimeout(() => {

                    loopload(tableData)
                })
            }
        </script>


    </body>

</html>

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值