H5滑動到底部自動加載數(shù)據(jù)

摘要

滑動頁面到底,自動加載數(shù)據(jù)算是一個很常用的功能,減少用戶操作,增加用戶體驗,讓用戶很順暢的查看數(shù)據(jù),但是瀏覽器廠商太多,有些方法和屬性不兼容,得到的值也是大不相同。

問題描述

手機型號紅米note7自帶瀏覽器中,document.documentElement.scrollTop的值是小數(shù),document.body.scrollTop值為0,而在微信瀏覽器中document.body.scrollTop有值并且為整數(shù),document.documentElement.scrollTop值為0,各大瀏覽器對于數(shù)據(jù)的處理不一樣,導(dǎo)致最后判斷觸底\color{red}{(文檔滾動高度 == 可是窗口高度 + scrollTop值)}這個等式不成立,不觸發(fā)加載數(shù)據(jù)的條件,其次應(yīng)該要做小范圍的容錯處理,在某個范圍內(nèi)成立就行

解決方案

按照這個公式\color{red}{(文檔滾動高度 == 可是窗口高度 + scrollTop值)}計算各部分的值

// 節(jié)流函數(shù)
function throttle(func, wait, mustRun) {
  let timeout,
    startTime = new Date();

  return function() {
    let context = this,
      args = arguments,
      curTime = new Date();
    clearTimeout(timeout);
    // 如果達到了規(guī)定的觸發(fā)時間間隔,觸發(fā) handler
    if (curTime - startTime >= mustRun) {
      func.apply(context, args);
      startTime = curTime;
      // 沒達到觸發(fā)間隔,重新設(shè)定定時器
    } else {
      timeout = setTimeout(func, wait);
    }
  };
}

// 可滾動高度
let scrollHeight = () =>
  document.body.scrollHeight || document.documentElement.scrollHeight;
// 可視窗口高度
let keshiHeight = () =>
  window.innerHeight ||
  document.documentElement.clientHeight ||
  document.body.clientHeight;

// 注:小米瀏覽器對于scrollTop的值會有小數(shù),需要做取整操作
// 向上滾動的高度,各大瀏覽器的計算法則不一樣,得到的值可能有小數(shù)
let scrollTopHeight = () =>
  Math.ceil(document.body.scrollTop || document.documentElement.scrollTop);

window.onscroll = throttle(
  () => {
    // 增加容錯范圍, 提前觸發(fā)加載
    if (scrollHeight() - 50 <= keshiHeight() + scrollTopHeight()) {
      // 業(yè)務(wù)邏輯操作,對號入座
      if (!this.noMore) {
        console.log("bottom");
        this.pageNo++;
        this.getDataFn();
      }
    }
  },
  300,
  300
);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,701評論 1 11
  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API(應(yīng)用程序編程接口)。 ??DOM 描繪...
    霜天曉閱讀 3,869評論 0 7
  • ??DOM 1 級主要定義的是 HTML 和 XML 文檔的底層結(jié)構(gòu)。 ??DOM2 和 DOM3 級則在這個結(jié)構(gòu)...
    霜天曉閱讀 1,601評論 1 3
  • 一、JS前言 (1)認識JS 也許你已經(jīng)了解HTML標記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,933評論 0 8
  • 今天玩 antd-mobile 碰到一個滾動條的問題:在 Tab 組件中使用多個 ListView ,當操作第一個...
    BertFu閱讀 30,791評論 7 9

友情鏈接更多精彩內(nèi)容