亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Vue簡單實現(xiàn)一個上拉加載更多分頁組件

 更新時間:2024年11月18日 08:24:45   作者:JYeontu  
上拉加載更多的分頁功能大家應該都見過或者使用過了吧,那么有多少同學自己實現(xiàn)過嗎,本文我們來簡單實現(xiàn)一個上拉加載更多分頁組件吧

效果展示

體驗地址

jyeontu.xyz/jvuewheel/#/JPageContentView

實現(xiàn)思路

1、組件模板結(jié)構

<template>
    <div class="j-page-content" ref="scrollable" @scroll="handleScroll">
        <slot></slot>
        <div v-if="loading" class="loading-indicator">{{ moreText }}</div>
    </div>
</template>
  • 可滾動容器:最外層是一個內(nèi)容容器,并且設置了 @scroll 事件監(jiān)聽器,當用戶滾動這個容器時,會觸發(fā) handleScroll 方法。
  • 內(nèi)容插槽<slot> 元素用于接收外部傳入的內(nèi)容。這意味著使用者可以在使用該組件時,將需要展示的列表項或者其他內(nèi)容放置在這個組件內(nèi)部,靈活性很高。
  • 加載提示:當 loadingtrue 時,會顯示一個帶有加載文本的 div。加載文本通過 moreText 屬性傳入,默認值為 "加載中..."。這個加載提示元素位于容器底部。

2、組件屬性(props)

props: {
    moreText: {
        type: String,
        default: "加載中...",
    },
    threshold: {
        type: String,
        default: "20",
    },
}
  • moreText:用于定義加載提示文本的內(nèi)容。外部使用者可以根據(jù)自己的應用場景和語言需求,自定義這個文本。
  • threshold:用于設置判斷接近容器底部的閾值。默認值為 "20",它表示當距離容器底部的距離小于等于這個閾值時,觸發(fā)加載更多的操作。這個值可以根據(jù)實際的設計需求和視覺效果進行調(diào)整。

3、組件數(shù)據(jù)(data)

data() {
    return {
        loading: false,
        isNearBottom: false,
        scrollableElement: null,
        isloading: false,
    };
}
  • loading:用于表示當前是否正在加載更多數(shù)據(jù)。初始值為 false,當觸發(fā)加載更多操作時,設置為 true,加載完成后再重置為 false。
  • isNearBottom:用于判斷是否接近容器底部。通過在滾動事件處理中計算得到,初始值為 false。
  • scrollableElement:用于存儲可滾動容器的引用。在組件掛載(mounted)階段獲取到對帶有 ref="scrollable"div 的引用。
  • isloading:這是一個額外的加載狀態(tài)標識,用于在加載過程中防止多次觸發(fā)加載更多操作。初始值為 false,在觸發(fā)加載更多操作時設置為 true,并在加載完成后的短暫延遲后重置為 false。

4、組件生命周期(mounted)

mounted() {
    this.scrollableElement = this.$refs.scrollable;
}

這里通過 this.$refs.scrollable 獲取到在模板中定義的可滾動容器的引用,并將其賦值給 scrollableElement,以便在后續(xù)的滾動事件處理中使用。

5、組件方法(methods)

(1) handleScroll 方法

handleScroll() {
    if (this.isloading) return;
    const scrollTop = this.scrollableElement.scrollTop;
    const clientHeight = this.scrollableElement.clientHeight;
    const scrollHeight = this.scrollableElement.scrollHeight;

    // 判斷是否接近底部
    this.isNearBottom =
        scrollTop + clientHeight >= scrollHeight - this.threshold;

    if (this.isNearBottom &&!this.loading) {
        this.loading = true;
        this.isloading = true;
        this.$emit("loadMore");
    }
}
  • 首先,該方法會檢查 isloading 的狀態(tài),如果正在加載(isloadingtrue),則直接返回,避免多次觸發(fā)加載操作。
  • 然后,獲取可滾動容器的當前滾動位置(scrollTop)、可視區(qū)域高度(clientHeight)以及整個可滾動內(nèi)容的高度(scrollHeight)。通過計算判斷是否接近底部(scrollTop + clientHeight >= scrollHeight - this.threshold)。
  • 如果接近底部且當前沒有在加載(!this.loading),則將 loadingisloading 都設置為 true,并通過 this.$emit("loadMore") 向外拋出一個名為 loadMore 的自定義事件。父組件可以監(jiān)聽這個事件來執(zhí)行加載更多數(shù)據(jù)的操作。

(2)loadMoreComplete 方法

loadMoreComplete() {
    this.loading = false;
    setTimeout(() => {
        this.isloading = false;
    }, 100);
}

當父組件完成加載更多數(shù)據(jù)的操作后,應該調(diào)用這個方法。它首先將 loading 設置為 false,表示加載操作已完成。然后,通過 setTimeout 設置一個 100 毫秒的延遲后,將 isloading 也設置為 false。這樣的延遲是為了確保在加載完成后的短暫時間內(nèi)不會再次觸發(fā)加載更多操作,避免可能出現(xiàn)的問題。

組件使用

<template>
    <div class="content" style="height: 500px">
        <JPageContent @loadMore="loadMoreData" ref="JPageContent">
            <div v-for="n in nums" :key="n">
                <div
                    style="
                        height: 100px;
                        width: 400px;
                        text-align: center;
                        line-height: 100px;
                        border: 1px solid gray;
                    "
                >
                    JPageContent-{{ n }}
                </div>
            </div>
        </JPageContent>
    </div>
</template>
<script>
export default {
    data() {
        return {
            nums: 10,
        }
    },
    methods: {
        loadMoreData() {
            if (this.nums >= 30) {
                this.$refs.JPageContent.loadMoreComplete();
                return;
            }
            setTimeout(() => {
                this.nums += 10;
                this.$refs.JPageContent.loadMoreComplete();
            }, 1000);
        }
    }
}
</script>

組件庫

組件文檔

目前該組件也已經(jīng)收錄到我的組件庫,組件文檔地址如下: jyeontu.xyz/jvuewheel/#/JPageContentView

到此這篇關于使用Vue簡單實現(xiàn)一個上拉加載更多分頁組件的文章就介紹到這了,更多相關Vue分頁組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue解決跨域路由沖突問題思路解析

    vue解決跨域路由沖突問題思路解析

    Vue.js(讀音 /vju&#720;/, 類似于 view) 是一套構建用戶界面的漸進式框架。本文給大家詳細介紹了vue解決跨域路由沖突問題思路解析,需要的朋友參考下吧
    2017-11-11
  • 使用Vant如何完成各種Toast提示框

    使用Vant如何完成各種Toast提示框

    這篇文章主要介紹了使用Vant如何完成各種Toast提示框,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • ElementUI實現(xiàn)el-table列寬自適應的代碼詳解

    ElementUI實現(xiàn)el-table列寬自適應的代碼詳解

    這篇文章給大家介紹了ElementUI實現(xiàn)el-table列寬自適應的詳細步驟,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • vue-element-admin中node-sass換成dart-sass,安裝依賴報code?128多種問題的解決方法

    vue-element-admin中node-sass換成dart-sass,安裝依賴報code?128多種問題的解決

    這篇文章主要介紹了vue-element-admin中node-sass換成dart-sass,安裝依賴報code?128多種問題的解決方法,本文給大家分享問題原因分析及解決方法,需要的朋友可以參考下
    2023-02-02
  • vue結(jié)合el-upload實現(xiàn)騰訊云視頻上傳功能

    vue結(jié)合el-upload實現(xiàn)騰訊云視頻上傳功能

    這篇文章主要介紹了vue結(jié)合el-upload實現(xiàn)騰訊云視頻上傳功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 在Vue3中實現(xiàn)四種全局狀態(tài)數(shù)據(jù)的統(tǒng)一管理的方法

    在Vue3中實現(xiàn)四種全局狀態(tài)數(shù)據(jù)的統(tǒng)一管理的方法

    在開發(fā)中,通常遇到四種全局狀態(tài)數(shù)據(jù):異步數(shù)據(jù)、同步數(shù)據(jù),傳統(tǒng)的Vue3使用不同機制處理這些數(shù)據(jù),而Zova框架通過Model機制來統(tǒng)一管理,簡化了數(shù)據(jù)處理流程,提高了代碼的可維護性,本文介紹在Vue3中實現(xiàn)四種全局狀態(tài)數(shù)據(jù)的統(tǒng)一管理的方法,感興趣的朋友一起看看吧
    2024-10-10
  • vue實現(xiàn)勻速輪播效果

    vue實現(xiàn)勻速輪播效果

    這篇文章主要為大家詳細介紹了vue實現(xiàn)勻速輪播效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Vue3 v-bind 指令的基本用法

    Vue3 v-bind 指令的基本用法

    在 Vue 3 中,v-bind?指令用于將表達式的值綁定到 DOM 元素的屬性上,這個指令的語法與 Vue 2 相同,但有一些細微的變化和改進,這篇文章主要介紹了Vue3 v-bind 指令的基本用法,需要的朋友可以參考下
    2024-08-08
  • element-ui重置resetFields()不生效的解決

    element-ui重置resetFields()不生效的解決

    本文主要介紹了element-ui重置resetFields()不生效的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • 解決Vue.js Devtools未檢測到Vue實例的問題

    解決Vue.js Devtools未檢測到Vue實例的問題

    在開發(fā)Vue.js應用時,Vue.js Devtools是一個不可或缺的調(diào)試工具,然而,有時我們可能會遇到“Vue.js not detected”的提示,這意味著Vue.js Devtools未能成功識別和連接到我們的Vue應用,本文將詳細解析這個問題,并提供相應的解決步驟與代碼示例,需要的朋友可以參考下
    2024-01-01

最新評論