首頁 web前端 Vue.js Vue 中如何實作滾動載入圖片或清單?

Vue 中如何實作滾動載入圖片或清單?

Jun 25, 2023 pm 03:40 PM
vue 滾動加載 圖片列表

隨著 Web 應用程式越來越複雜,我們經常需要在頁面上展示大量的圖片或清單。如果一次載入所有的內容,會大大影響頁面的載入速度和使用者體驗。在這種情況下,滾動載入就成了一種非常流行的方式。

滾動加載,也叫無限滾動,指的是在用戶滾動頁面的過程中,透過 AJAX 技術,即時請求後續資料。這種技術在 Facebook、Twitter、Instagram 等社群媒體網站中廣泛應用,以實現高效體驗。

在 Vue.js 中,實現滾動載入的方式通常有兩種,一種是自己寫程式碼實現,另一種是使用第三方外掛程式。接下來,我們就一一進行介紹。

一、自己寫程式碼實作捲動載入

Vue.js 提供了一個非常方便的指令 v-scroll,可以用來監聽頁面的捲動事件。我們可以在滾動時,判斷 div 元素的 scrollTop 距離是否達到了底部,如果達到了底部就觸發後續資料請求。

下面是一個使用v-scroll 實作滾動載入圖片的範例程式碼:

<template>
  <div class="image-list" v-scroll="onScroll">
    <div class="image" v-for="image in images" :key="image.id">
      <img :src="image.src" />
    </div>
    <div v-if="loading">加载中...</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      images: [],
      loading: false,
      page: 1,
      pageSize: 10
    }
  },

  mounted() {
    this.loadImages()
  },

  methods: {
    loadImages() {
      this.loading = true
      // 模拟请求数据,每次请求 10 条数据
      setTimeout(() => {
        let start = (this.page - 1) * this.pageSize
        let end = start + this.pageSize
        for (let i = start; i < end; i++) {
          this.images.push({
            id: i,
            src: `http://www.example.com/images/${i}.jpg`
          })
        }
        this.loading = false
        this.page++
      }, 1000)
    },

    onScroll(e) {
      // 获取 div 元素的 scrollTop 和 clientHeight
      let scrollTop = e.target.scrollTop
      let clientHeight = e.target.clientHeight
      let scrollHeight = e.target.scrollHeight
      // 比较 scrollTop + clientHeight 和 scrollHeight
      if (scrollTop + clientHeight >= scrollHeight) {
        this.loadImages()
      }
    }
  }
}
</script>
登入後複製

在這個範例中,我們使用v-scroll 監聽了div 元素的滾動事件,並在onScroll 方法中判斷是否觸底,如果觸底則觸發loadImages 方法,該方法會模擬非同步請求資料並將資料push 到images 數組。此外,為了提升使用者體驗,我們新增了一個 loading 變量,用來即時提示資料正在載入中。

二、使用第三方外掛程式實現滾動載入

除了自己寫程式碼實作捲動載入外,我們還可以使用一些第三方外掛程式來實現滾動載入。這裡我們介紹一下比較常用的兩個插件,分別是 vue-infinite-scroll 和 vue-virtual-scroll-list。

  1. vue-infinite-scroll 插件

vue-infinite-scroll 是一款基於Vue.js 實現的無限滾動插件,它能夠幫助我們實現滾動加載列表、圖片等場景。使用這個外掛程式非常簡單,只需要在需要實作捲動載入的元件中,加入 v-infinite-scroll 指令,然後指定需要觸發捲動載入的方法即可。

下面是一個使用vue-infinite-scroll 插件實現滾動載入清單的範例程式碼:

<template>
  <div class="list" v-infinite-scroll="loadMore">
    <div class="item" v-for="(item, index) in items" :key="index">
      {{ item.text }}
    </div>
  </div>
</template>

<script>
import InfiniteScroll from 'vue-infinite-scroll'

export default {
  mixins: [InfiniteScroll],

  data() {
    return {
      items: []
    }
  },

  methods: {
    loadMore() {
      // 模拟异步请求数据
      setTimeout(() => {
        for (let i = 0; i < 10; i++) {
          this.items.push({ text: `Item ${this.items.length + 1}` })
        }
      }, 1000)
    }
  }
}
</script>
登入後複製

在這個範例中,我們先透過npm 安裝了vue-infinite-scroll 插件,並將其引入到組件中。然後,我們使用 mixins 將自動建立一個可觸發的 infinite-scroll 事件的 Vue 實例混入到目前元件中。最後,我們在 v-infinite-scroll 指令中指定 loadMore 方法,該方法會模擬非同步請求資料並將資料 push 到 items 陣列中。

  1. vue-virtual-scroll-list 插件

vue-virtual-scroll-list 是一款基於Vue.js 實現的虛擬滾動插件,能夠幫助我們快速實現大數據量的列表滾動,提高頁面效能和使用者體驗。與傳統的滾動載入不同的是,vue-virtual-scroll-list 採用了虛擬滾動技術,只渲染當前可見區域內的資料項,從而避免了大量的DOM 渲染和重排,提高了頁面的效率和流暢度。

下面是一個使用vue-virtual-scroll-list 外掛程式實現滾動載入清單的範例程式碼:

<template>
  <virtual-list
    :size="50"
    :remain="10"
    :data-key="'id'"
    :data-sources="items"
    :data-component="$options.components.item"
    @load="loadMore"
  >
  </virtual-list>
</template>

<script>
import VirtualList from 'vue-virtual-scroll-list'
import Item from './Item.vue'

export default {
  components: { Item },

  data() {
    return {
      items: []
    }
  },

  methods: {
    loadMore(start, end) {
      // 模拟异步请求数据
      setTimeout(() => {
        let count = end - start
        for (let i = 0; i < count; i++) {
          this.items.push({ id: this.items.length + 1, text: `Item ${this.items.length + 1}` })
        }
      }, 1000)
    }
  }
}
</script>
登入後複製

在這個範例中,我們先透過npm 安裝了vue-virtual-scroll- list 插件,並將其引入元件中。然後,我們在模板中使用 元件,該元件接受 size、remain、data-key、data-sources 和 data-component 等參數。

其中,size 參數指定了每個資料項的高度,remain 參數指定了預先渲染的數量,data-key 指定了用於唯一標識每個資料項的字段,data-sources 指定了需要渲染的資料列表,data-component 指定了資料項目的渲染元件。最後,我們在 load 事件中,執行非同步請求資料的邏輯。

結語

透過以上介紹,我們可以發現,Vue.js 中實作捲動載入圖片或清單有多種方式。自己寫程式碼實作雖然靈活,但是程式碼較多,需要花費一定的時間和精力;而使用第三方外掛程式雖然簡單,但需要深入了解外掛程式的原理和使用方法,才能更好地進行業務開發。因此,在實現滾動載入時,需要根據具體業務場景和自己的實力來選擇適合自己的方式。

以上是Vue 中如何實作滾動載入圖片或清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

vue怎麼給按鈕添加函數 vue怎麼給按鈕添加函數 Apr 08, 2025 am 08:51 AM

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

vue中的watch怎麼用 vue中的watch怎麼用 Apr 07, 2025 pm 11:36 PM

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

vue多頁面開發是啥意思 vue多頁面開發是啥意思 Apr 07, 2025 pm 11:57 PM

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

vue.js怎麼引用js文件 vue.js怎麼引用js文件 Apr 07, 2025 pm 11:27 PM

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 &lt;script&gt; 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

vue返回上一頁的方法 vue返回上一頁的方法 Apr 07, 2025 pm 11:30 PM

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 &lt;router-link to=&quot;/&quot;&gt; 組件window.history.back(),方法選擇取決於場景。

vue遍歷怎麼用 vue遍歷怎麼用 Apr 07, 2025 pm 11:48 PM

Vue.js 遍歷數組和對像有三種常見方法:v-for 指令用於遍歷每個元素並渲染模板;v-bind 指令可與 v-for 一起使用,為每個元素動態設置屬性值;.map 方法可將數組元素轉換為新數組。

vue的div怎麼跳轉 vue的div怎麼跳轉 Apr 08, 2025 am 09:18 AM

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。

See all articles