美文网首页
H5滑动到底部自动加载数据

H5滑动到底部自动加载数据

作者: zdmission | 来源:发表于2019-12-09 15:03 被阅读0次

摘要

滑动页面到底,自动加载数据算是一个很常用的功能,减少用户操作,增加用户体验,让用户很顺畅的查看数据,但是浏览器厂商太多,有些方法和属性不兼容,得到的值也是大不相同。

问题描述

手机型号红米note7自带浏览器中,document.documentElement.scrollTop的值是小数,document.body.scrollTop值为0,而在微信浏览器中document.body.scrollTop有值并且为整数,document.documentElement.scrollTop值为0,各大浏览器对于数据的处理不一样,导致最后判断触底\color{red}{(文档滚动高度 == 可是窗口高度 + scrollTop值)}这个等式不成立,不触发加载数据的条件,其次应该要做小范围的容错处理,在某个范围内成立就行

解决方案

按照这个公式\color{red}{(文档滚动高度 == 可是窗口高度 + scrollTop值)}计算各部分的值

// 节流函数
function throttle(func, wait, mustRun) {
  let timeout,
    startTime = new Date();

  return function() {
    let context = this,
      args = arguments,
      curTime = new Date();
    clearTimeout(timeout);
    // 如果达到了规定的触发时间间隔,触发 handler
    if (curTime - startTime >= mustRun) {
      func.apply(context, args);
      startTime = curTime;
      // 没达到触发间隔,重新设定定时器
    } else {
      timeout = setTimeout(func, wait);
    }
  };
}

// 可滚动高度
let scrollHeight = () =>
  document.body.scrollHeight || document.documentElement.scrollHeight;
// 可视窗口高度
let keshiHeight = () =>
  window.innerHeight ||
  document.documentElement.clientHeight ||
  document.body.clientHeight;

// 注:小米浏览器对于scrollTop的值会有小数,需要做取整操作
// 向上滚动的高度,各大浏览器的计算法则不一样,得到的值可能有小数
let scrollTopHeight = () =>
  Math.ceil(document.body.scrollTop || document.documentElement.scrollTop);

window.onscroll = throttle(
  () => {
    // 增加容错范围, 提前触发加载
    if (scrollHeight() - 50 <= keshiHeight() + scrollTopHeight()) {
      // 业务逻辑操作,对号入座
      if (!this.noMore) {
        console.log("bottom");
        this.pageNo++;
        this.getDataFn();
      }
    }
  },
  300,
  300
);

相关文章

  • ScrollView 嵌套listview 会自动滑动到scro

    ScrollView 嵌套listview时,当listview自动加载时,会自动滑动到scrollview到底部...

  • H5滑动到底部自动加载数据

    摘要 滑动页面到底,自动加载数据算是一个很常用的功能,减少用户操作,增加用户体验,让用户很顺畅的查看数据,但是浏览...

  • 下拉刷新

    Android LRecyclerView实现下拉刷新,滑动到底部自动加载更多 PullToRefresh使用详解...

  • BaseRecyclerViewAdapterHelper 之

    参考博客 NestedScrollView+RecyclerView实现滑动到底部自动加载更新 问题描述 我在使用...

  • 上划加载列表

    上划到已加载数据的底部,也自动继续加载更多数据 全部数据已加载完,也显示单独状态

  • RecyclerView调用notify更新之后自动滑动到底部

    需求:RecyclerView插入数据之后调用notifyDataSetChange之后,界面需要自动滑动到底部。...

  • RecyclerView优化:AsyncListUtil的使用

    AsyncListUtil 可以异步加载数据,并根据列表滑动会自动分页加载,数据加载完成会回调主线程更新UI,并且...

  • 实现瀑布流类似功能

    思路:判断当前页面是否滑动到底部,若滑动到底部则使用ajax异步加载接下来的内容,使用append插入到当前页面中...

  • 分页加载

    思路:当页面滑动到底部是,加载更多数据,如果无数据,停止加载提示已经到底。1.设置页面数和显示的数据数量。2.利用...

  • 好用的插件

    插件 图片懒加载模板插件art-template H5滑动插件iscroll-5/H5滑动插件better-scr...

网友评论

      本文标题:H5滑动到底部自动加载数据

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