亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

原生js滾動(dòng)到底部加載數(shù)據(jù)和下拉刷新 Scrollload

HollisChuang / 2981人閱讀

摘要:原文地址初衷如今移動(dòng)端站點(diǎn)越來越多,滾動(dòng)到底部加載數(shù)據(jù)和下拉刷新的需求非常的常見,即使現(xiàn)在很多站點(diǎn)也會(huì)有這樣的需求,比如百度首頁就有。

原文地址 https://github.com/fa-ge/Scrollload/blob/master/README.md

初衷

如今移動(dòng)端站點(diǎn)越來越多,滾動(dòng)到底部加載數(shù)據(jù)和下拉刷新的需求非常的常見,即使現(xiàn)在很多pc站點(diǎn)也會(huì)有這樣的需求,比如百度首頁就有。雖然簡單的完成這么一個(gè)功能非常方便,但是滾動(dòng)往往會(huì)成為性能的瓶頸,處理不好滾動(dòng)很有可能會(huì)不流暢。既然很多頁面和項(xiàng)目都需要,當(dāng)然最需要有一個(gè)復(fù)用性高的插件。但是我卻一直沒找到特別好用的插件,有些需要依賴jquery,但貌似編寫這樣的插件時(shí)jquery并沒有帶來任何的便利。

Scrollload.js介紹

Scrollload是一個(gè)無依賴,體積極?。▔嚎s+gzip后不到3k),可配置性高(可以自定義加載時(shí)候動(dòng)畫,加載完后的dom,提前加載的距離),可擴(kuò)展性強(qiáng)大(很方便做到指定容器內(nèi)的滾動(dòng),多tab的滾動(dòng),異常處理,刷新重新加載等),性能好(在滾動(dòng)的時(shí)候做了一些性能優(yōu)化,如緩存window的高度,函數(shù)節(jié)流)的js插件。源碼地址: https://github.com/fa-ge/Scro...

解決的痛點(diǎn)

無依賴,配置簡單,有多套滾動(dòng)加載效果可選(需要多帶帶引入對(duì)應(yīng)的css,當(dāng)然也有默認(rèn)效果)

支持下拉刷新

在ios中,全局滾動(dòng)會(huì)有很多不好的體驗(yàn),我認(rèn)為是可以用局部滾動(dòng)來替代全局的。局部滾動(dòng)也會(huì)有幾個(gè)坑,但都是可解決的,也就是說全局滾動(dòng)的坑目前還很難解決。該插件內(nèi)置局部滾動(dòng)坑的解決方案,方便使用局部滾動(dòng)替代全局滾動(dòng)且無副作用。具體見ios局部滾動(dòng)的坑及解決方案。

兼容性

不支持ie8及以下瀏覽器。

示例

無任何效果

有l(wèi)oading動(dòng)畫一(百度移動(dòng)端包括下拉刷新)

有l(wèi)oading動(dòng)畫二

多個(gè)tab效果

div容器中的滾動(dòng)加載

左右滑動(dòng)tab并且滾動(dòng)加載——復(fù)雜示例

異常處理

點(diǎn)擊刷新重新加載

示例源碼

安裝
npm install scrollload --save
使用

如果你沒有用模塊管理, 直接從window對(duì)象下取Scrollload對(duì)象也是可以的,打包后的js放在lib目錄下,可以直接用script標(biāo)簽引入
同時(shí)支持模塊引入

//ES6
import Scrollload from "Scrollload"
//commonjs
const Scrollload = require("Scrollload").default

當(dāng)然也支持amd,不過我沒用過。
真正用起來也非常簡單。記住一點(diǎn)。插件會(huì)把底部DOM插入到container最后一個(gè)子節(jié)點(diǎn)之后。

你的dom結(jié)構(gòu)是以下這樣的

插件會(huì)把底部DOM就會(huì)被插在ul標(biāo)簽的后面。你可以按照你以前的方式操作dom。demo中我都是用這種方式來做的。 我

下面是js中的使用。

let page = 1
new Scrollload({
      // container 和 content 兩個(gè)配置的默認(rèn)取的scrollload-container和scrollload-content類的dom。只要你按照以上的dom結(jié)構(gòu)寫,這兩個(gè)配置是可以省略的
      container: document.querySelector(".scrollload-container"),
    content: document.querySelector(".scrollload-content"),
    loadMore: function(sl) {
        
        if (page === 6) {
          // 沒有數(shù)據(jù)的時(shí)候需要調(diào)用noMoreData
            sl.noMoreData()
            return
        }

        // 我這里用jquery的不是因?yàn)樾枰猨query,只是jquery的語法看起來比較簡單。大家都認(rèn)識(shí)。
        // 如果你不是用jquery,可以看看原生的insertAdjacentHTML方法來替代append
        $.ajax({
            type: "GET",
            url: `http://rap.taobao.org/mockjsdata/14522/getgamelist?page=${page++}`,
            dataType: "json",
            success: function(data){
                // contentDom其實(shí)就是你的scrollload-content類的dom
                $(sl.contentDom).append(data)

                // 處理完業(yè)務(wù)邏輯后必須要調(diào)用unlock
                sl.unLock()
            },
            error: function(xhr, type){
                // 加載出錯(cuò),需要執(zhí)行該方法。這樣底部DOM會(huì)出現(xiàn)出現(xiàn)異常的樣式。
                sl.throwException()
            }
        })
    },
    // 你也可以關(guān)閉下拉刷新
    enablePullRefresh: true,
    pullRefresh: function (sl) {
        $.ajax({
            type: "GET",
            url: `http://rap.taobao.org/mockjsdata/14522/getgamelist?page=1`,
            dataType: "json",
            success: function(data){
                $(sl.contentDom).prepend(data)

                // 處理完業(yè)務(wù)邏輯后必須要調(diào)用refreshComplete
                sl.refreshComplete()
            }
        })
    }
})
參數(shù)列表
// 以下是配置參數(shù)及其默認(rèn)內(nèi)容     

// 容器
container: document.querySelector(".scrollload-container"),
// 列表內(nèi)容
content: container.querySelector(".scrollload-content"),
// 視窗(默認(rèn)是window,如果是局部滾動(dòng)需要設(shè)置滾動(dòng)的dom)
window: window,
  
// 是否開啟加載更多(默認(rèn)開啟,如果關(guān)閉則滾動(dòng)到底部則不再出現(xiàn)加載更多)
enableLoadMore: true,
// 初始化的時(shí)候是否鎖定,鎖定的話則不會(huì)去加載更多。由于這個(gè)插件實(shí)例化后默認(rèn)是沒有鎖定的所以會(huì)去調(diào)用loadMore,但其實(shí)在多個(gè)tab的情況下是不應(yīng)該一實(shí)例化完后就去調(diào)用的。所以有了這個(gè)參數(shù)。
isInitLock: false,
// 閥值 (滾動(dòng)到底部提前加載的距離)
threshold: 10,

// 修復(fù)局部滾動(dòng)的兩個(gè)坑。參見ios局部滾動(dòng)的坑及解決方案 https://zhuanlan.zhihu.com/p/24837233
useLocalScrollFix: false,
useScrollFix: false,

// 底部加載中的html
loadingHtml: generateHtml("加載中..."),
// 底部沒有更多數(shù)據(jù)的html
noMoreDataHtml: generateHtml("沒有更多數(shù)據(jù)了"),
// 底部出現(xiàn)異常的html
exceptionHtml: generateHtml("出現(xiàn)異常"),
// 加載更多的回調(diào)
loadMore: noop,

// 是否開啟下拉刷新
enablePullRefresh: false,
// 頂部下拉刷新的html
notEnoughRefreshPortHtml: generateHtml("下拉刷新"),
// 頂部松開刷新的html
overRefreshPortHtml: generateHtml("松開刷新"),
// 頂部正在刷新的html
refreshingHtml: generateHtml("正在刷新"),
// 下拉刷新的回調(diào)
pullRefresh: noop,
// 到達(dá)刷新點(diǎn)的回調(diào)(包括向上和向下,可以通過isMovingDown判斷方向)
arrivedRefreshPortHandler: noop,
// 開始滑動(dòng)的回調(diào)
touchStart: noop,
// 滑動(dòng)時(shí)的回調(diào)
touchMove: noop,
// 滑動(dòng)中松開手指的回調(diào)
touchEnd: noop,
// 超過可刷新位置后的監(jiān)聽函數(shù)
overRefreshPortHandler: noop,
// 未超過可刷新位置前的監(jiān)聽函數(shù)
notEnoughRefreshPortHandler: noop,

// 計(jì)算下拉的阻力函數(shù)
calMovingDistance(start, end) {
    return (end - start) / 3
},
// 實(shí)例化完后的回調(diào)
initedHandler: noop
API
方法

lock(): 鎖定后不會(huì)調(diào)用loadMore方法

unLock(): 每次滾動(dòng)到底部都會(huì)鎖定,所以你在loadMoreFn方法中需要解鎖,下次滾動(dòng)到底部才能繼續(xù)調(diào)用loadMoreFn

noMoreData(): 當(dāng)你的數(shù)據(jù)全部加載完后調(diào)用這個(gè)方法,將顯示沒有更多數(shù)據(jù)的div,你也可以配置這個(gè)div,用noMoreDataHtml配置參數(shù)

refreshData(): 當(dāng)你調(diào)用完noData方法后,如果你想刷新當(dāng)前的數(shù)據(jù)重新加載就要調(diào)用這個(gè)方法

throwException(): 出現(xiàn)異常需要調(diào)用這個(gè)方法,會(huì)在底部DOM中出現(xiàn)相應(yīng)的樣式

solveException(): 當(dāng)你的異常問題解決后需要調(diào)用這個(gè)方法可以繼續(xù)加載數(shù)據(jù)

refreshComplete(): 下拉刷新的時(shí)候你去請(qǐng)求完數(shù)據(jù)后需要調(diào)用這個(gè)函數(shù)通知我。我就可以把正在刷新的狀態(tài)改成刷新完成。

getOptions(): 獲取配置

setOptions(obj): 修改配置。obj和new Scrollload()的第二個(gè)參數(shù)一樣的格式。

setGlobalOptions(obj): 全局配置,一次配置多次時(shí)候。調(diào)用這個(gè)方法和之前的方法不一樣。之前的都需要對(duì)象實(shí)例化后才能調(diào)用。這個(gè)方法直接Scrollload構(gòu)造函數(shù)上調(diào)用。Scrollload.setGlobalOptions()。接受的參數(shù)和setOptions方法一樣

屬性

bottomDom: 底部DOM,包裹著加載中動(dòng)畫和沒有更多數(shù)據(jù)的dom對(duì)象

isLock: 是否為鎖定狀態(tài)

hasMoreData: 是否還有更多數(shù)據(jù),默認(rèn)為true,調(diào)用noData方法后為false

container: 你傳進(jìn)來的container

content: 你傳進(jìn)來的content

win: 你傳進(jìn)來的window

isMovingDown: 下拉刷新的時(shí)候你滑動(dòng)的方向

isRefreshing: 下拉刷新的時(shí)候你是否在刷新中

distance: 下拉刷新的時(shí)候你滑動(dòng)的dom移動(dòng)的距離,不是你手指移動(dòng)的距離。這兩者的關(guān)系可以通過calMovingDistance計(jì)算

交流

如果你有好的加載更多動(dòng)畫的效果,可以在loading-demos文件夾下寫一些自己的demo,loading的css必須是loading.css,并在頭部加入loadingHtml的dom結(jié)構(gòu)。參考,然后提一個(gè)pr給我。

當(dāng)然用的時(shí)候有什么建議都可以和我提,有什么不懂得也可以和我提。任何形式和我提都可以。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/81117.html

相關(guān)文章

  • H5下拉刷新上拉加載實(shí)現(xiàn)原理淺析

    摘要:原文鏈接前言在移動(dòng)端網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如,庫等。 原文鏈接:justrockit.top 前言 在移動(dòng)端H5網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如iscroll,pulltorefresh.js庫等。下面是對(duì)這兩種常見交互基本實(shí)現(xiàn)原理的闡述。 實(shí)現(xiàn)原理 下拉刷新...

    X1nFLY 評(píng)論0 收藏0
  • H5下拉刷新上拉加載實(shí)現(xiàn)原理淺析

    摘要:原文鏈接前言在移動(dòng)端網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如,庫等。 原文鏈接:justrockit.top 前言 在移動(dòng)端H5網(wǎng)頁中,下拉刷新和上拉加載更多數(shù)據(jù)的交互方式出現(xiàn)頻率很高,開源社區(qū)也有很多類似的解決方案,如iscroll,pulltorefresh.js庫等。下面是對(duì)這兩種常見交互基本實(shí)現(xiàn)原理的闡述。 實(shí)現(xiàn)原理 下拉刷新...

    Bmob 評(píng)論0 收藏0
  • 好快, 1分鐘開發(fā)好一個(gè)下拉刷新,滾動(dòng)加載列表

    摘要:但本活又己交給音長爭標(biāo)識(shí)我。八說前它特用達(dá)圓是路看江才。開次他爭從點(diǎn)軍容給油很出。成育料技所心并精北酸間辦元。除現(xiàn)七團(tuán)一歷積動(dòng)兩水礦花始線黨黨她。 好快, 1分鐘寫好下拉刷新,滾動(dòng)加載自動(dòng)分頁列表 前言 歡迎關(guān)注BUI Webapp專欄 或者 bui神速微信公眾號(hào). 以往文章: 2019開發(fā)最快的Webapp框架--BUI交互框架 微信Webapp開發(fā)的各種變態(tài)路由需求及解決辦法! ...

    wemall 評(píng)論0 收藏0
  • 好快, 1分鐘開發(fā)好一個(gè)下拉刷新,滾動(dòng)加載列表

    摘要:但本活又己交給音長爭標(biāo)識(shí)我。八說前它特用達(dá)圓是路看江才。開次他爭從點(diǎn)軍容給油很出。成育料技所心并精北酸間辦元。除現(xiàn)七團(tuán)一歷積動(dòng)兩水礦花始線黨黨她。 好快, 1分鐘寫好下拉刷新,滾動(dòng)加載自動(dòng)分頁列表 前言 歡迎關(guān)注BUI Webapp專欄 或者 bui神速微信公眾號(hào). 以往文章: 2019開發(fā)最快的Webapp框架--BUI交互框架 微信Webapp開發(fā)的各種變態(tài)路由需求及解決辦法! ...

    468122151 評(píng)論0 收藏0
  • 使用 CSS overscroll-behavior 控制滾動(dòng)行為:自定義下拉刷新溢出效果

    摘要:否則會(huì)出現(xiàn)兩個(gè)下拉刷新之前之后禁用炫光和回彈效果將屬性制定為,可以禁用默認(rèn)的滾動(dòng)邊界效果。完整的地址源碼最終效果閱讀原文討論地址使用控制滾動(dòng)行為自定義下拉刷新和溢出效果如果你想?yún)⑴c討論,請(qǐng)點(diǎn)擊這里 dev-reading/fe 是一個(gè)閱讀、導(dǎo)讀、速讀的 repo,不要依賴于 dev-reading/fe 學(xué)習(xí)知識(shí)。本 repo 只是一個(gè)快速了解文章內(nèi)容的工具,并不提供全文解讀和翻譯。你...

    jhhfft 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<