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>

相关推荐

  1. js滚动底部数据实现

    2023-12-31 00:28:01       40 阅读
  2. 【VUE】el-table表格 实现滚动底部更多数据

    2023-12-31 00:28:01       11 阅读
  3. vue实现滚动

    2023-12-31 00:28:01       30 阅读
  4. 前端图片

    2023-12-31 00:28:01       19 阅读
  5. React中实现虚拟滚动

    2023-12-31 00:28:01       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-31 00:28:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-31 00:28:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-31 00:28:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-31 00:28:01       20 阅读

热门阅读

  1. 装饰器模式(Decorator)

    2023-12-31 00:28:01       35 阅读
  2. 人大金仓:元数据查询语句记录

    2023-12-31 00:28:01       25 阅读
  3. SpringBoot全局异常捕获

    2023-12-31 00:28:01       34 阅读
  4. 数据被锁?被.mkp 勒索病毒攻击后的拯救行动

    2023-12-31 00:28:01       32 阅读
  5. php5.6安装openssl扩展

    2023-12-31 00:28:01       42 阅读
  6. SSRF靶场安装测试记录

    2023-12-31 00:28:01       34 阅读
  7. 结构体\判断日期是否合法(代码分步解析)

    2023-12-31 00:28:01       37 阅读
  8. centos7.9安装图形远程控制桌面工具rdesktop

    2023-12-31 00:28:01       40 阅读
  9. 2. 云原生实战之kubesphere搭建

    2023-12-31 00:28:01       33 阅读
  10. 力扣133. 克隆图

    2023-12-31 00:28:01       32 阅读
  11. C语言中的标准IO

    2023-12-31 00:28:01       32 阅读