美文网首页前端
JavaScript - 下拉加载

JavaScript - 下拉加载

作者: ElricTang | 来源:发表于2019-10-28 21:15 被阅读0次

准备工作:了解如何获取浏览器各种高度

一. 下拉加载的简单实现

1. 获取网页被卷去的高度
document.documentElement.scrollTop
2. 获取可视区域高度
document.documentElement.clientHeight
3. 获取整个文档高度
document.body.scrollHeight
4. 判断是否需要加载
卷去高度 + 可视区域 + 加载参数 > 整个文档高度时加载更多,其中加载参数默认为0,也就是滚动条拉到最下面才判断为可加载。
5. 监听滚动条事件

            function load(range=0){
                let scroll = document.documentElement.scrollTop;
                let view = document.documentElement.clientHeight;
                let all = document.body.scrollHeight;
                if(scroll + view + range > all){
                    return true
                }
                return false;
            }
  • 测试:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>下拉加载更多</title>
        <style>
            div{
                height:2000px;
            }
        </style>
    </head>
    <body>
        <div></div>
        <script>
            function load(range=0){
                let scroll = document.documentElement.scrollTop;
                let view = document.documentElement.clientHeight;
                let all = document.body.scrollHeight;
                if(scroll + view + range > all){
                    return true
                }
                return false;
            }
            window.onscroll = function(){
                console.log(load())
            }
        </script>
    </body>
</html>

可以看到,当下拉到最下面时的确判定为可加载,但是多次触发加载可能会出问题(请求数据没那么快),而且重复加载可能卡死。
6. 优化(添加防抖)
        <script>
            function load(range=0){
                let scroll = document.documentElement.scrollTop;
                let view = document.documentElement.clientHeight;
                let all = document.body.scrollHeight;
                if(scroll + view + range > all){
                    console.log('开始加载');
                }
                console.log('等一会');
            }
            function debounce(fn,delay){
                var timer = null;
                return function(){
                    if(timer){
                        clearTimeout(timer);
                    }
                    timer = setTimeout(fn,delay);
                }
            }           
            window.onscroll = debounce(load,500);
        </script>

上面的方法只是简单实现,也并不适用于移动端(移动端用touch事件)。只是为了了解原理,正常开发还是推荐大家使用如vue-infinite-loading等插件。

相关文章

  • JavaScript - 下拉加载

    准备工作:了解如何获取浏览器各种高度 一. 下拉加载的简单实现 1. 获取网页被卷去的高度document.doc...

  • 自定义ListView实现下拉刷新

    下拉加载更多在我们平常使用的APP中经常会见到,比如我们刷微博时下拉加载更多的新闻,空间动态下拉加载更多的消息等。...

  • Vue下拉刷新组件

    之前写了上拉加载,当然也就有下拉刷新。下拉刷新在web项目中使用会比上拉加载少。这边补充两点: 1、上拉加载和下拉...

  • Android面试整理

    RecyclerView的上拉加载、下拉刷新怎么实现?RecyclerView原生实现侧滑、拖动? 上拉加载、下拉...

  • JavaScript延迟加载

    延迟加载javascript,也就是页面加载完成之后再加载javascript,也叫on demand(按需)加载...

  • 列表适配器

    ------上拉下拉刷新加载------****SmartRefreshLayout 智能下拉刷新框架~20190...

  • vant ui中 PullRefresh and List

    需求:展示(用户)账户的明细,需要懒加载和下拉刷新效果(List实现懒加载,PullRefresh实现下拉刷新) ...

  • ionic4 入门 (五) 上拉加载 下拉刷新

    ionic4 (入门) 上拉加载 下拉刷新 继续 ionic 开发首页 上拉加载 下拉刷新 html 部分代码 下...

  • Android智能下拉刷新、上拉加载框架(二)——SmartRe

    Android智能下拉刷新、上拉加载框架(一)——SmartRefreshLayoutAndroid智能下拉刷新、...

  • vue UI库用法

    vueUI集合 一、元素拖拽 二、VUX UI组件库 三、上拉刷新,下拉加载 下拉刷新,上拉加载 scroll 演...

网友评论

    本文标题:JavaScript - 下拉加载

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