scroll事件实现监控滚动条并分页显示(zepto.js)

 更新时间:2016年12月18日 17:11:42   作者:阳冰  
这篇文章主要为大家详细介绍了scroll事件实现监控滚动条并分页显示示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

需求:在APP落地页上的底部位置显示此前其他用户的购买记录,要求此div盒子只显示3条半,但一页有10条,div内的滑动条滑到一页底部自动加载下一页并发加载埋点。

实现:首先理解三个概念,分别是contentH,viewH,scrollTop。

contentH:即所要滑动的元素内容的高度,包括可见部分以及滚动条下面的不可见部分。

ViewH:即我们看到的这个DIV的高度,不包括可见部分也不包括滚动条下面的不可见部分。

scrollTop:即滚动条距离顶部的距离,若scrollTop的值为0,则代表滚动条在最上面。拉动滚动条,从最上面到最下面,变化的是scrollTop的值。例:假如contentH的高度为2000,而这个DIV的高度只有300,那么还有1700不可见,拉动滚动条到最底部,此时scrollTop为1700,所以这个1700也可以理解为滚动条可以滚动的长度。当滑动条拉到底部的时候,contentH=viewH+scrollTop。

故可实现如下:

$.ajax({
  type: "get",
  url: "record.json",//测试用假数据
  dataType: "json",
  success: function (records) {
    var showLength = records.data.length;//需要显示的总长度
    var flag = showLength <= 10 ? showLength : 10;
    load_records(0, flag);//开始加载第一页
    hxmClickStat('mar_all_207_ssjk.goumai.load.' + 1, {url_ver: "SJCGBS-10030"});//不论长度是否超过10都发送第一页埋点
    if (showLength > 10) {
      var origin = 1, load = 2;
      $('.records_body').scroll(function () {
        var contentH = $(this).get(0).scrollHeight;
        var viewH = $('.records_body').height();
        var scrollTop = $(this).scrollTop();
        var pages = Math.ceil(showLength / 10);//需要显示的总页数
        if (viewH + scrollTop == contentH && load <= pages) {
          if (load * 10 < showLength) {
            load_records(origin++ * 10, load++ * 10);//加载下一页的10条数据
            hxmClickStat('mar_all_207_ssjk.goumai.load.' + origin, {url_ver: "SJCGBS-10030"});//滑动到底部开始加载下一页时发送埋点
          } else {
            load_records(origin * 10, showLength);//加载最后一页
            hxmScrollBottomStat('mar_all_207_ssjk.goumai.bottom', {url_ver: "SJCGBS-10030"});//最后一页发送埋点
            load++;//避免重复执行
          }
        }
      });
    }
    function load_records(start, end) {
      for (var i = start; i < end; i++) {
        var stime = records.data[i].time;
        var accure_time = stime.slice(5, stime.length);
        var record_html = '<div class="records_item"><img src=' + records.data[i].avatar + ' class="avatar"/><div class="buyer_info"><p class="buyer_name">' + records.data[i].account + '</p><p class="status_title">购买成功</p></div>\n\<' +
          'div class="buyer_address"><p class="buy_address">' + records.data[i].city + ' IP:' + records.data[i].ip + '</p>\n\<' +
          'p class="buy_time">' + accure_time + '</p></div></div>';
        $(record_html).appendTo('.records_body');//插入一条购买记录
      }
    }
  },
  error: function () {
    console.log('some errors happened!');
  }
});

以上方法在苹果手机浏览器中会达不到预期效果,解决方法及代码改进

将触底判断条件更改为

if (viewH + scrollTop +1>= contentH && load <= pages)

究其原因,故在滚动时将scrollTop和viewH、contentH分别打印出来,滑到底部的时候发现他们有1个单位的误差,可能是因为某些div元素的高度不为整数而js在判断的时候直接将其取整了,故可以选择将其加1。

也可以使用另一种方式百分比的判断条件来实现:在滚动条距离底端2%以内:scrollTop / (contentH– viewH) >= 0.98

或者使用绝对数值范围来实现,滚动条距离底端30px以内:contentH – viewH – scrollTop <= 30

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • jquery和css3中的选择器nth-child使用方法和用途示例

    jquery和css3中的选择器nth-child使用方法和用途示例

    nth-child(),是CSS3中的一个伪类选择符,JQuery选择器继承了CSS的部分语法,允许通过标签名、属性名、内容对DOM元素进行快速、准确的选择。
    2023-03-03
  • js中DOM事件绑定分析

    js中DOM事件绑定分析

    在这篇文章中小编给大家整理了关于JS中DOM事件绑定的相关知识点,有兴趣的朋友赶快学习参考下。
    2018-03-03
  • 详解webpack 多页面/入口支持&公共组件单独打包

    详解webpack 多页面/入口支持&公共组件单独打包

    这篇文章主要介绍了详解webpack 多页面/入口支持&公共组件单独打包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • js实现模态框拖拽

    js实现模态框拖拽

    这篇文章主要为大家详细介绍了js实现模态框拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Bootstrap3 内联单选和多选框

    Bootstrap3 内联单选和多选框

    这篇文章主要介绍了Bootstrap3 内联单选和多选框的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • JS验证input输入框(字母,数字,符号,中文)

    JS验证input输入框(字母,数字,符号,中文)

    本文主要介绍了JS验证input输入框(字母,数字,符号,中文)的方法。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • JS 自执行函数原理及用法

    JS 自执行函数原理及用法

    这篇文章主要介绍了JS 自执行函数原理及技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • JavaScript实现自定义媒体播放器方法介绍

    JavaScript实现自定义媒体播放器方法介绍

    本文主要介绍了JavaScript自定义媒体播放器的实现过程与方法,具有一定的参考作用,下面跟着小编一起来看下吧
    2017-01-01
  • javascript实现登录框拖拽

    javascript实现登录框拖拽

    这篇文章主要为大家详细介绍了javascript实现登录框拖拽,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • js+ajax实现获取文件大小的方法

    js+ajax实现获取文件大小的方法

    这篇文章主要介绍了js+ajax实现获取文件大小的方法,涉及JavaScript调用ajax交互及后台C#文件操作的相关技巧,需要的朋友可以参考下
    2015-12-12

最新评论