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

使用Vue簡(jiǎn)單實(shí)現(xiàn)一個(gè)上拉加載更多分頁(yè)組件

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

效果展示

體驗(yàn)地址

jyeontu.xyz/jvuewheel/#/JPageContentView

實(shí)現(xiàn)思路

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

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

2、組件屬性(props)

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

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

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

4、組件生命周期(mounted)

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

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

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

(2)loadMoreComplete 方法

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

當(dāng)父組件完成加載更多數(shù)據(jù)的操作后,應(yīng)該調(diào)用這個(gè)方法。它首先將 loading 設(shè)置為 false,表示加載操作已完成。然后,通過 setTimeout 設(shè)置一個(gè) 100 毫秒的延遲后,將 isloading 也設(shè)置為 false。這樣的延遲是為了確保在加載完成后的短暫時(shí)間內(nèi)不會(huì)再次觸發(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>

組件庫(kù)

組件文檔

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

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

相關(guān)文章

  • vue關(guān)于接口請(qǐng)求數(shù)據(jù)過大導(dǎo)致瀏覽器崩潰的問題

    vue關(guān)于接口請(qǐng)求數(shù)據(jù)過大導(dǎo)致瀏覽器崩潰的問題

    這篇文章主要介紹了vue關(guān)于接口請(qǐng)求數(shù)據(jù)過大導(dǎo)致瀏覽器崩潰的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 使用vue構(gòu)建多頁(yè)面應(yīng)用的示例

    使用vue構(gòu)建多頁(yè)面應(yīng)用的示例

    這篇文章主要介紹了使用vue構(gòu)建多頁(yè)面應(yīng)用的示例,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-10-10
  • 談?wù)勔騐ue.js引發(fā)關(guān)于getter和setter的思考

    談?wù)勔騐ue.js引發(fā)關(guān)于getter和setter的思考

    最近因?yàn)楣镜男马?xiàng)目決定使用Vue.js來做,但在使用的過程中發(fā)現(xiàn)了一個(gè)有趣的事情,因?yàn)榘l(fā)現(xiàn)的這個(gè)事情展開了一些對(duì)于getter和setter的思考,具體是什么下面通過這篇文章來一起看看吧,有需要的朋友們可以參考學(xué)習(xí)。
    2016-12-12
  • vue?elementui二次封裝el-table帶插槽問題

    vue?elementui二次封裝el-table帶插槽問題

    這篇文章主要介紹了vue?elementui二次封裝el-table帶插槽問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 關(guān)于Vue在ie10下空白頁(yè)的debug小結(jié)

    關(guān)于Vue在ie10下空白頁(yè)的debug小結(jié)

    這篇文章主要給大家介紹了關(guān)于Vue在ie10下空白頁(yè)的debug相關(guān)資料,這是最近在工作中遇到的一個(gè)問題,通過查找相關(guān)的資料終于解決了,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • el-menu如何根據(jù)多層樹形結(jié)構(gòu)遞歸遍歷展示菜單欄

    el-menu如何根據(jù)多層樹形結(jié)構(gòu)遞歸遍歷展示菜單欄

    這篇文章主要介紹了el-menu根據(jù)多層樹形結(jié)構(gòu)遞歸遍歷展示菜單欄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-07-07
  • vue2.0 + ele的循環(huán)表單及驗(yàn)證字段方法

    vue2.0 + ele的循環(huán)表單及驗(yàn)證字段方法

    今天小編就為大家分享一篇vue2.0 + ele的循環(huán)表單及驗(yàn)證字段方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue3.0路由自動(dòng)導(dǎo)入的方法實(shí)例

    vue3.0路由自動(dòng)導(dǎo)入的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于vue3.0路由自動(dòng)導(dǎo)入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • vue cli3 配置 stylus全局變量的使用方式

    vue cli3 配置 stylus全局變量的使用方式

    這篇文章主要介紹了vue cli3 配置 stylus全局變量的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 前端Vue3圖像編輯功能實(shí)現(xiàn)代碼(并生成mask圖)

    前端Vue3圖像編輯功能實(shí)現(xiàn)代碼(并生成mask圖)

    隨著互聯(lián)網(wǎng)的飛速發(fā)展,圖片編輯已經(jīng)成為人們?nèi)粘I钪薪?jīng)常使用的一項(xiàng)技能,下面這篇文章主要介紹了前端Vue3圖像編輯功能實(shí)現(xiàn)的相關(guān)資料,并生成mask圖,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09

最新評(píng)論

尼木县| 梓潼县| 水富县| 黎平县| 弋阳县| 潮安县| 贡山| 太仓市| 都昌县| 厦门市| 肇源县| 穆棱市| 漾濞| 楚雄市| 始兴县| 禹城市| 金寨县| 山阴县| 莎车县| 丁青县| 华安县| 清河县| 巫山县| 道真| 千阳县| 湖州市| 宝兴县| 新巴尔虎右旗| 九台市| 宁乡县| 长白| 吴江市| 华亭县| 嘉定区| 赣州市| 罗江县| 白河县| 无为县| 三亚市| 天全县| 什邡市|