欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Vue3實(shí)現(xiàn)無限滾動(dòng)組件的示例代碼

 更新時(shí)間:2022年09月20日 11:50:03   作者:大前端私房菜  
如果你在社交媒體上停留的時(shí)間過長,那么,你所在的網(wǎng)站很可能正在使用無限滾動(dòng)組件。這篇文章教你利用Vue3實(shí)現(xiàn)無限滾動(dòng)組件,感興趣的可以參考一下

如果你在社交媒體上停留的時(shí)間過長,那么,你所在的網(wǎng)站很可能正在使用無限滾動(dòng)組件。

無限滾動(dòng)組件是在用戶向下滾動(dòng)頁面時(shí)加載新內(nèi)容,而不是將其分成多個(gè)頁面。

它們對(duì)于特定類型的內(nèi)容(例如用戶生成的內(nèi)容)非常有效。

以下是無限滾動(dòng)的示例。

在今天的教程中,我們將使用 Composition API 創(chuàng)建一個(gè) Vue3 無限滾動(dòng)組件。這是我們將在它結(jié)束時(shí)構(gòu)建的內(nèi)容的預(yù)覽。

如你所見,它是無限滾動(dòng),屏幕右側(cè)的滾動(dòng)條反映了這一點(diǎn)。

現(xiàn)在,讓我們一起來看看這個(gè)組件的實(shí)現(xiàn)過程。

為什么還要使用無限滾動(dòng)組件

我們都見過使用無限滾動(dòng)來顯示其內(nèi)容的網(wǎng)站的示例,但是什么時(shí)候使用它,它的效果會(huì)比使用典型的分頁系統(tǒng)更好呢?

你可以閱讀我之前分享的一篇文章《無限滾動(dòng)與分頁哪個(gè)用戶體驗(yàn)更好?如何正確使用它們》,在這里,我只簡單的總結(jié)一下它們的有缺點(diǎn)。

無限滾動(dòng)的優(yōu)點(diǎn)

  •  用戶參與和內(nèi)容發(fā)現(xiàn)
  •  滾動(dòng)比點(diǎn)擊更好(更好的可用性)
  •  滾動(dòng)適用于移動(dòng)設(shè)備

無限滾動(dòng)的缺點(diǎn)

  •  頁面性能和設(shè)備資源
  •  項(xiàng)目搜索和位置 - 用戶無法為頁面添加書簽并保留位置
  •  不相關(guān)的滾動(dòng)條

就像所有與 Web 開發(fā)有關(guān)的事情一樣,選擇任何一個(gè)選項(xiàng)都有正當(dāng)?shù)睦碛?。?qǐng)務(wù)必考慮哪個(gè)最適合你的項(xiàng)目!

無論如何,學(xué)習(xí)如何構(gòu)建一個(gè) Vue3 無限滾動(dòng)組件是非常有趣的,并且可能對(duì)你有用。

首先,讓我們從高層次上回顧一下這個(gè)系統(tǒng)是如何工作的。

主要分為三個(gè)部分

  •  生成內(nèi)容的模擬 API 調(diào)用
  •  呈現(xiàn)單個(gè)內(nèi)容的 PostComponent
  •  ListComponent 包含所有內(nèi)容組件并處理從 API 加載內(nèi)容

1.模擬 API 調(diào)用

在教程中,我們將編寫一個(gè)返回硬編碼數(shù)據(jù)的虛擬 API 調(diào)用。如果你在真實(shí)的后端和數(shù)據(jù)庫中實(shí)現(xiàn)這一點(diǎn),重要的方面,你可以根據(jù)數(shù)據(jù)庫中的大小和位置決定以某種方式限制你的結(jié)果。

這個(gè) API 調(diào)用可以是任何東西,從簡單應(yīng)用程序中的簡單數(shù)據(jù)庫查詢一直到更高級(jí)應(yīng)用程序中的復(fù)雜推薦算法。

以下是社交媒體網(wǎng)站常用的內(nèi)容加載算法的一些不同想法:

  •  發(fā)布日期
  •  與當(dāng)前用戶的相關(guān)性
  •  帖子上的活動(dòng)

然而,為簡單起見,我們的算法只會(huì)生成隨機(jī)的帖子數(shù)據(jù),并根據(jù)給定的參數(shù)返回 X 個(gè)帖子。

var names = ['Matt Maribojoc', 'Lebron James', 'Bill Gates', 'Childish Gambino'] // used to generate posts for this tutorial
const getPosts = (number) => {
 // generate a number of posts
 // in a real setting, this would be a database call or algorithm
 let ret = []
 for (var i = 0; i < number; i++) {
   ret.push({
     author: names[i % names.length],
     content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.'
   })
 }  
 return ret
}
export default getPosts

2.制作我們的內(nèi)容組件

現(xiàn)在我們有了生成內(nèi)容的方法,讓我們創(chuàng)建一個(gè)允許我們渲染它們的組件。

這段代碼沒有什么花哨的,我們只需要通過組件的 props 接收一個(gè)帖子,然后渲染作者和內(nèi)容。這里也有一些風(fēng)格可以讓事情變得更漂亮。

<template>
 <div class='post'>
   <h2> {{ post.author }} </h2>
   <p> {{ post.content }} </p>
 </div>
</template>
<script>
export default {
 props: {
   post: Object
 }
}
</script>
<style scoped>
 .post {
   background: #fff;
   padding: 1.5em;
 }
 .post:not(:last-child) {
   border-bottom: 1px solid #ddd;
 }
 .post h2 {
   font-size: 1.3em;
   padding-bottom: 0.25rem;
 }
 .post p {
   color: #888;
 }
</style>

3.顯示我們的內(nèi)容

接下來,讓我們實(shí)際弄清楚如何在屏幕上顯示一些帖子。這就是 ListComponent.vue 組件派上用場的地方。

如果你沒有任何 Vue3 經(jīng)驗(yàn),這段代碼對(duì)你來說可能有點(diǎn)奇怪。但是請(qǐng)查看本 Vue3 入門指南。

簡而言之,Vue3 將 Options API 替換為 Composition API,這意味著代碼(生命周期掛鉤、數(shù)據(jù)等)都組織在一個(gè)設(shè)置方法中。

所以首先,我們要導(dǎo)入一些東西:

  •  我們的 API 調(diào)用
  •  我們的 PostComponent
  •  用于創(chuàng)建反應(yīng)數(shù)據(jù)的參考

onMounted 和 onUnmounted 訪問這些生命周期 hooks。 

import PostComponent from './PostComponent.vue'
import { ref, onMounted, onUnmounted } from 'vue'
import getPosts from '../scripts/post-loader'

接下來,在我們的 setup 方法中,我們想要設(shè)置一個(gè)響應(yīng)式的內(nèi)容變量來調(diào)用我們的 getPosts API 調(diào)用。不要忘記返回它,以便我們的模板可以訪問它!

setup () {
   const posts = ref(getPosts(10))
   return {
     posts,
   }
}

最后,為了在模板中顯示我們的數(shù)據(jù),我們想要運(yùn)行一個(gè) v-for 循環(huán)來迭代我們的內(nèi)容并為每個(gè)內(nèi)容呈現(xiàn)一個(gè) PostComponent。我們的模板應(yīng)該是這樣的(注意 .list-component 有一個(gè) ref,我們稍后會(huì)談到)

<template>
 <div class='scrolling-component' ref='scrollComponent'>
   <post-component v-for='post in posts' :post="post" />
 </div>
</template>
<script>

我們當(dāng)前的頁面應(yīng)該呈現(xiàn) 10 個(gè)內(nèi)容,但是如果我們滾動(dòng)到底部,什么都不會(huì)發(fā)生。

那么,現(xiàn)在讓我們繼續(xù)進(jìn)行激動(dòng)人心的部分:無限滾動(dòng)!

4.Vue3 無限滾動(dòng)

現(xiàn)在我們已經(jīng)完成了所有設(shè)置,當(dāng)用戶向下滾動(dòng)到內(nèi)容底部時(shí),我們可以開始加載更多數(shù)據(jù)。

讓我們從創(chuàng)建一個(gè)方法開始,它一次加載 10 個(gè)內(nèi)容并將它們附加到我們的帖子變量中。

setup () {
   // ...
   const loadMorePosts = () => {
     let newPosts = getPosts(10)
     console.log(newPosts)
     posts.value.push(...newPosts)
   }
 // ...
}

現(xiàn)在,我們只需要一種方法來觸發(fā)這個(gè)方法。我們將通過添加一個(gè)監(jiān)聽滾動(dòng)事件并調(diào)用方法的事件監(jiān)聽器來做到這一點(diǎn)。我們將在組件安裝時(shí)添加它,并在組件卸載(銷毀)時(shí)刪除它。

setup () {
    // ...  
   onMounted(() => {
     window.addEventListener("scroll", handleScroll)
   })
   onUnmounted(() => {
     window.removeEventListener("scroll", handleScroll)
   })
const handleScroll = (e) => {
   }
               // ...
}

非常棒!現(xiàn)在,我們需要準(zhǔn)備好開始加載更多內(nèi)容了。如果你還記得前面的教程內(nèi)容的話,其實(shí),我們只需要向 .list-component 元素添加了一個(gè) refs 屬性。如果你之前在 Vue 中使用過 refs,這是一個(gè)熟悉的概念,但我們?cè)?Vue3 中設(shè)置它們的方式有點(diǎn)不同。

我們將再次使用 refs 方法來實(shí)例化我們的 ref,然后,從我們的 setup 方法中返回它。

setup () {
   const posts = ref(getPosts(10))
   const scrollComponent = ref(null)
return {
     posts,
     scrollComponent
   }
}

通過使用 refs 訪問我們的元素,我們可以完成我們的方法來確定我們是否滾動(dòng)到內(nèi)容的底部。

以下代碼通過檢查我們內(nèi)容的底部是否在屏幕上可見來工作。如果是,我們調(diào)用我們的方法來加載更多內(nèi)容!

const handleScroll = (e) => {
     let element = scrollComponent.value
     if ( element.getBoundingClientRect().bottom < window.innerHeight ) {
       loadMorePosts()
     }
   }

就是這樣!當(dāng)我們向下滾動(dòng)到當(dāng)前內(nèi)容的底部時(shí),應(yīng)該會(huì)自動(dòng)加載新內(nèi)容。讓我們看看我們有什么。

無限滾動(dòng)組件的可能擴(kuò)展

這只是創(chuàng)建Vue3無限滾動(dòng)組件的介紹。有很多不同的方向可以改進(jìn)它。

如果你在真實(shí)系統(tǒng)中構(gòu)建它,我會(huì)考慮添加以下一些想法。

  •  由于 API 調(diào)用將是異步的,因此創(chuàng)建某種加載微調(diào)器,在加載新數(shù)據(jù)時(shí)顯示
  •  創(chuàng)建更復(fù)雜的 API 算法并將其連接到數(shù)據(jù)庫
  • 為每個(gè)內(nèi)容添加更多數(shù)據(jù)并找到顯示它的新方法

到此這篇關(guān)于基于Vue3實(shí)現(xiàn)無限滾動(dòng)組件的示例代碼的文章就介紹到這了,更多相關(guān)Vue無限滾動(dòng)組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue中子組件向父組件傳值以及.sync修飾符詳析

    Vue中子組件向父組件傳值以及.sync修飾符詳析

    .sync?修飾符所提供的功能,當(dāng)一個(gè)子組件改變了一個(gè)prop的值時(shí),這個(gè)變化也會(huì)同步到父組件中所綁定,下面這篇文章主要給大家介紹了關(guān)于Vue中子組件向父組件傳值以及.sync修飾符的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Swiper在Vue2中的簡單使用方法

    Swiper在Vue2中的簡單使用方法

    這篇文章主要給大家介紹了關(guān)于Swiper在Vue2中的簡單使用方法,swiper是一款現(xiàn)代化的移動(dòng)端輪播組件,可以在Vue中輕松使用,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • vue項(xiàng)目基于WebRTC實(shí)現(xiàn)一對(duì)一音視頻通話

    vue項(xiàng)目基于WebRTC實(shí)現(xiàn)一對(duì)一音視頻通話

    這篇文章主要介紹了vue項(xiàng)目基于WebRTC實(shí)現(xiàn)一對(duì)一音視頻通話效果,實(shí)現(xiàn)代碼分為前端和后端兩部分代碼,需要的朋友可以參考下
    2024-05-05
  • 開啟Vue項(xiàng)目缺少node_models包的問題及解決

    開啟Vue項(xiàng)目缺少node_models包的問題及解決

    這篇文章主要介紹了開啟Vue項(xiàng)目缺少node_models包的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳解VUE單頁應(yīng)用骨架屏方案

    詳解VUE單頁應(yīng)用骨架屏方案

    這篇文章主要介紹了詳解VUE單頁應(yīng)用骨架屏方案,詳細(xì)的介紹了什么是骨架屏以及是憲法方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 關(guān)于ElementUI自定義Table支持render

    關(guān)于ElementUI自定義Table支持render

    這篇文章主要介紹了關(guān)于ElementUI自定義Table支持render,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue數(shù)據(jù)代理的原理和實(shí)現(xiàn)

    Vue數(shù)據(jù)代理的原理和實(shí)現(xiàn)

    數(shù)據(jù)代理是什么?通過一個(gè)對(duì)象代理,對(duì)另一個(gè)對(duì)象中屬性的操作,簡單就是說:可以通過?對(duì)象b?對(duì)?對(duì)象a?中的屬性進(jìn)行操作,這里我學(xué)到的數(shù)據(jù)代理是用Object.defineProperty這個(gè)方法進(jìn)行操作
    2022-11-11
  • 當(dāng)vue路由變化時(shí),改變導(dǎo)航欄的樣式方法

    當(dāng)vue路由變化時(shí),改變導(dǎo)航欄的樣式方法

    今天小編就為大家分享一篇當(dāng)vue路由變化時(shí),改變導(dǎo)航欄的樣式方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Element Steps步驟條的使用方法

    Element Steps步驟條的使用方法

    這篇文章主要介紹了Element Steps步驟條的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue3中進(jìn)行頁面局部刷新組件刷新的操作方法

    Vue3中進(jìn)行頁面局部刷新組件刷新的操作方法

    這篇文章主要介紹了Vue3中進(jìn)行頁面局部刷新組件刷新的操作方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12

最新評(píng)論