最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS實(shí)現(xiàn)滾動(dòng)條觸底加載更多

 更新時(shí)間:2019年09月19日 13:08:49   作者:治電小白菜  
這篇文章主要介紹了JS滾動(dòng)條觸底加載更多,需要的朋友可以參考下

原理

1.通過(guò)監(jiān)聽(tīng)滾動(dòng)區(qū)域DOM的scroll事件, 計(jì)算出觸底

// 滾動(dòng)可視區(qū)域高度 + 當(dāng)前滾動(dòng)位置 === 整個(gè)滾動(dòng)高度
scrollDom.clientHeight + scrollDom.scrollTop === scrollDom.scrollHeight

2.觸底后觸發(fā)列表添加, 列表添加使用createDocumentFragment, 將多次插入的DOM先存入內(nèi)存, 最后一次填充進(jìn)去, 提高性能, 也方便后面的MutationObserver監(jiān)聽(tīng)

3.使用MutationObserver監(jiān)聽(tīng)列表的DOM添加, 添加完畢后, 隱藏加載中提示

示例

https://codepen.io/klren0312/full/dybgayL

參考資料

https://developer.mozilla.org/zh-CN/docs/Web/API/Element/clientHeight
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollHeight
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTop
https://developer.mozilla.org/zh-CN/docs/Web/API/GlobalEventHandlers/onscroll
https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createDocumentFragment
https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver

代碼

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style>
  .hide {
   display: none;
  }
  .scroll {
   height: 200px;
   width: 300px;
   overflow-y: auto;
   border: 1px solid #ddd;
  }
  .loading {
   text-align: center;
  }
  ul {
   margin: 0;
   padding: 0;
  }
  li {
   padding: 10px;
   margin: 10px;
   text-align: center;
   background: #FFF6F6;
   list-style-type: none;
  }
 </style>
</head>
<body>
 <div id="js-scroll" class="scroll">
  <ul id="js-list">
   <li>000000</li>
   <li>000000</li>
   <li>000000</li>
   <li>000000</li>
   <li>000000</li>
  </ul>
  <div class="loading hide" id="js-loading">加載中...</div>
 </div>
 <script>
  let index = 0 // 列表個(gè)數(shù)
  const listDom = document.getElementById('js-list')
  const loadingDom = document.getElementById('js-loading')
  /**
   * 使用MutationObserver監(jiān)聽(tīng)列表的 DOM 改變
   */
  const config = {
   attributes: true,
   childList: true,
   subtree: true
  }
  const callback = function(mutationsList, observer) {
   for (let mutation of mutationsList) {
    if (mutation.type === 'childList') {
     if (index === 5) {
      loadingDom.innerText = '加載完畢'
     } else {
      loadingDom.classList.add('hide')
     }
    }
   }
  }
  const observer = new MutationObserver(callback)
  observer.observe(listDom, config)
  /**
   * clientHeight 滾動(dòng)可視區(qū)域高度
   * scrollTop 當(dāng)前滾動(dòng)位置
   * scrollHeight 整個(gè)滾動(dòng)高度
   */
  const scrollDom = document.getElementById('js-scroll')
  scrollDom.onscroll = () => {
   if (scrollDom.clientHeight + parseInt(scrollDom.scrollTop) === scrollDom.scrollHeight) {
    if (loadingDom.classList.contains('hide') && index <= 5) {
     loadingDom.classList.remove('hide')
     addList()
    }
    if (index >= 5) {
     observer.disconnect() // 加載完畢停止監(jiān)聽(tīng)列表 DOM 變化
    }
   }
  }
  /**
   * 添加列表
   */
  function addList () {
   const fragment = document.createDocumentFragment()
   setTimeout(() => {
    ++index
    for (let i = 0; i < 5; i++) {
     const li = document.createElement('li')
     li.innerText = new Array(6).fill(index).join('')
     fragment.appendChild(li)
    }
    listDom.appendChild(fragment)
   } , 1000)
  }
 </script>
</body>
</html>

總結(jié)

以上所述是小編給大家介紹的JS實(shí)現(xiàn)滾動(dòng)條觸底加載更多,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • jQuery正則表達(dá)式驗(yàn)證表單代碼演示

    jQuery正則表達(dá)式驗(yàn)證表單代碼演示

    這篇文章主要給大家介紹了關(guān)于jQuery正則表達(dá)式驗(yàn)證表單的相關(guān)資料,我們?cè)趯?xiě)表單的時(shí)候會(huì)通過(guò)一些正則表達(dá)式來(lái)驗(yàn)證是否正確,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • javascript中強(qiáng)制執(zhí)行toString()具體實(shí)現(xiàn)

    javascript中強(qiáng)制執(zhí)行toString()具體實(shí)現(xiàn)

    Javascript通常會(huì)根據(jù)方法或運(yùn)算符的需要而自動(dòng)把值轉(zhuǎn)成所需的類(lèi)型,這可能導(dǎo)致各種錯(cuò)誤,接下來(lái)為大家介紹下javascript如何強(qiáng)制執(zhí)行toString(),感興趣的朋友可以參考下哈
    2013-04-04
  • 深入淺析JavaScript的API設(shè)計(jì)原則

    深入淺析JavaScript的API設(shè)計(jì)原則

    這篇文章主要介紹了JavaScript的API設(shè)計(jì)原則,包括接口的流暢性,一致性,參數(shù)的處理,可擴(kuò)展性,對(duì)錯(cuò)誤的處理,可預(yù)見(jiàn)性,注釋和文檔的可讀性,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06
  • JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解

    JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解

    從 ES2019 中開(kāi)始引入了一種扁平化數(shù)組的新方法,可以展平任何深度的數(shù)組,這篇文章主要介紹了JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解,需要的朋友可以參考下
    2023-06-06
  • 在JavaScript中對(duì)HTML進(jìn)行反轉(zhuǎn)義詳解

    在JavaScript中對(duì)HTML進(jìn)行反轉(zhuǎn)義詳解

    下面小編就為大家?guī)?lái)一篇在JavaScript中對(duì)HTML進(jìn)行反轉(zhuǎn)義詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • JavaScript中this關(guān)鍵字使用方法詳解

    JavaScript中this關(guān)鍵字使用方法詳解

    JavaScript中this關(guān)鍵字使用方法詳解...
    2007-03-03
  • 微信小程序通過(guò)一個(gè)json實(shí)現(xiàn)分享朋友圈圖片

    微信小程序通過(guò)一個(gè)json實(shí)現(xiàn)分享朋友圈圖片

    這篇文章主要給大家介紹了關(guān)于微信小程序通過(guò)一個(gè)json實(shí)現(xiàn)分享朋友圈圖片的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JS利用Intl解決前端日期和時(shí)間的格式化詳解

    JS利用Intl解決前端日期和時(shí)間的格式化詳解

    Intl?是一個(gè)全局對(duì)象,它的主要用途就是展示國(guó)際化信息,可以將字符串,數(shù)字和日期和時(shí)間轉(zhuǎn)換為指定地區(qū)的格式。這篇文章就來(lái)和大家聊聊如何利用Intl解決前端日期和時(shí)間的格式化吧
    2023-03-03
  • JavaScript Event學(xué)習(xí)第八章 事件的順序

    JavaScript Event學(xué)習(xí)第八章 事件的順序

    在第一章中我提到一個(gè)初次看起來(lái)可能不是那么好理解的是一個(gè)問(wèn)題:“如果一個(gè)元素和他的父元素對(duì)于同樣的事件都有事件處理程序,那么哪個(gè)會(huì)首先執(zhí)行呢?”毫無(wú)疑問(wèn),看是什么瀏覽器。
    2010-02-02
  • 微信小程序?qū)崿F(xiàn)YDUI的ScrollNav組件

    微信小程序?qū)崿F(xiàn)YDUI的ScrollNav組件

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)YDUI的ScrollNav組件,滾動(dòng)導(dǎo)航效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02

最新評(píng)論

达日县| 巫溪县| 浙江省| 柯坪县| 周口市| 仁布县| 临武县| 汉阴县| 石楼县| 徐州市| 上蔡县| 望城县| 九龙城区| 甘泉县| 汤原县| 宣汉县| 青海省| 静乐县| 灵石县| 鲜城| 阿拉善右旗| 卓尼县| 新乡县| 攀枝花市| 宽城| 石景山区| 尼勒克县| 长阳| 南华县| 区。| 绥德县| 曲麻莱县| 济源市| 泊头市| 东乌珠穆沁旗| 莲花县| 连山| 宜良县| 浦城县| 临夏市| 日照市|