滚动加载效果实现

在我们做滚动加载的时候首先要思考以下问题:

一、如何判断滚动条是否滚动到页面底部?

当滚动条的滚动高度和整个文档高度相差不到15像素,则认为滚动条滚动到页面底部了

1、内容文档高度 - 滚动条滚动高度 - 父容器高度 < 15

$(document).height() - $(window).scrollTop() - $(this).height()<15

2、container的高度(父容器高度) + 滚动条高度 >= innerContainer(内容文档高度)的高度就触发

<div class="container">
<div class="innerContainer"></div>
</div>
二、当异步请求数据到还没插入DOM(刷新中)触发地步高度不能再次请求数据
三、当没有下一页数据的时候如何处理

当没有下一页数据的时候滚动到底端也不要请求数据加载了

我们还需要了解以下属性:


1、scrollTop

scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置。
scroll top offset 指的是滚动条相对于其顶部的偏移。
如果该方法未设置参数,则返回以像素计的相对滚动条顶部的偏移。
tips : 设置滚动条的垂直偏移

$("div").scrollLeft(100);

2、scroll() 方法

当用户滚动指定的元素时,会发生 scroll 事件。
scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口)。
scroll() 方法触发 scroll 事件,或规定当发生 scroll 事件时运行的函数。

//jquery
$(selector).scroll(function)
//js
window.addEventListener('scroll',function(){
  console.log(90909090)
}) 

2、height() 方法

获取高度的事件

$(selector).height()

简单的demo


html

<div class="container">
<div class="innerContainer"></div>
</div>

css

.container{
height:100px;
overflow-y: auto;
}
.innerContainer{
height:200px;
}

js

    $('.container').scroll(function(){
        var _containerHeight = $('.container').height(),
            _scrollTop = $('.container').scrollTop(),
            _innerHeight = $('.innerContainer').height()
        if(_containerHeight + _scrollTop >= _innerHeight){
            //请求接口来做插入数据
        }
        
    })

滚动优化


我们不希望实时触发handle,在处理一些高频率触发的 DOM 事件的时候,节流(Throttling)能极大提高用户体验。
下拉加载优化demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,680评论 1 92
  •   DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。   DOM2 和 DOM3 级则在这个结构...
    霜天晓阅读 5,356评论 1 3
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,861评论 1 11
  • Window和document对象的区别 window对象window对象表示浏览器中打开的窗口window对象是...
    FConfidence阅读 6,682评论 0 5
  • 2018年1月12日 星期五 天气晴 今天是第二天在公众号里写日记,曾经也在日记本里手写日记,但坚持了三...
    微笑哥张明涛阅读 1,001评论 0 0