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

?Electron-Vite?+?Vue?3??項(xiàng)目中實(shí)現(xiàn)流暢觸底加載更多功能

 更新時(shí)間:2025年07月31日 11:38:05   作者:韶鹿先生  
本文介紹在Electron-Vite+Vue3項(xiàng)目中實(shí)現(xiàn)觸底加載的兩種方式:原生滾動(dòng)監(jiān)聽和vue-infinite-loading庫,下面給大家分享詳細(xì)實(shí)現(xiàn)步驟,感興趣的朋友一起看看吧

在 ?Electron-Vite + Vue 3? 項(xiàng)目中實(shí)現(xiàn)觸底加載更多(無限滾動(dòng))功能,可以通過監(jiān)聽滾動(dòng)事件或使用現(xiàn)成的庫(如 vue-infinite-loading)來完成。以下是詳細(xì)實(shí)現(xiàn)步驟:

?方案一:原生滾動(dòng)監(jiān)聽(推薦)??

?1. 模板部分?

在需要觸底加載的列表組件中,添加滾動(dòng)監(jiān)聽:

<template>
  <div class="scroll-container" @scroll="handleScroll">
    <div v-for="item in items" :key="item.id">{{ item.content }}</div>
    <div v-if="loading" class="loading">加載中...</div>
    <div v-if="noMore" class="no-more">沒有更多了</div>
  </div>
</template>

?2. 腳本部分?

<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
const items = ref([]); // 數(shù)據(jù)列表
const page = ref(1);   // 當(dāng)前頁碼
const loading = ref(false);
const noMore = ref(false);
// 模擬異步加載數(shù)據(jù)
const loadMore = async () => {
  if (loading.value || noMore.value) return;
  loading.value = true;
  try {
    // 替換為實(shí)際API請(qǐng)求
    const newItems = await fetchData(page.value);
    if (newItems.length === 0) {
      noMore.value = true;
    } else {
      items.value = [...items.value, ...newItems];
      page.value++;
    }
  } finally {
    loading.value = false;
  }
};
// 監(jiān)聽滾動(dòng)事件
const handleScroll = (e) => {
  const { scrollTop, scrollHeight, clientHeight } = e.target;
  // 觸底條件:距離底部 < 50px
  if (scrollHeight - (scrollTop + clientHeight) < 50) {
    loadMore();
  }
};
// 初始化加載
onMounted(() => {
  loadMore();
});
// 清理事件(如果綁定在window上)
onUnmounted(() => {
  window.removeEventListener('scroll', handleScroll);
});
</script>

?3. 樣式部分?

<style scoped>
.scroll-container {
  height: 80vh; /* 固定高度觸發(fā)滾動(dòng) */
  overflow-y: auto;
}
.loading, .no-more {
  text-align: center;
  padding: 10px;
}
</style>

?方案二:使用vue-infinite-loading庫?

?1. 安裝依賴?

npm install vue-infinite-loading@next

?2. 在組件中使用?

<template>
  <div>
    <div v-for="item in items" :key="item.id">{{ item.content }}</div>
    <InfiniteLoading @infinite="loadMore" :distance="100">
      <template #spinner>加載中...</template>
      <template #no-more>沒有更多了</template>
    </InfiniteLoading>
  </div>
</template>
<script setup>
import { ref } from 'vue';
import InfiniteLoading from 'vue-infinite-loading';
const items = ref([]);
const page = ref(1);
const noMore = ref(false);
const loadMore = async ($state) => {
  try {
    const newItems = await fetchData(page.value);
    if (newItems.length === 0) {
      noMore.value = true;
      $state.complete();
    } else {
      items.value.push(...newItems);
      page.value++;
      $state.loaded();
    }
  } catch (err) {
    $state.error();
  }
};
</script>

?關(guān)鍵細(xì)節(jié)說明?

  • ?觸底條件計(jì)算?
    • scrollHeight:內(nèi)容總高度
    • scrollTop:已滾動(dòng)高度
    • clientHeight:容器可視高度
    • 公式:scrollHeight - (scrollTop + clientHeight) < threshold
  • ?Electron 特殊處理?
  • 如果內(nèi)容在 <webview><iframe> 中,需在 ?主進(jìn)程? 中允許加載外部資源:
new BrowserWindow({
  webPreferences: {
    webSecurity: false // 允許跨域請(qǐng)求(開發(fā)環(huán)境)
  }
});
  • ?性能優(yōu)化?
  • 使用 ?防抖?(lodash.debounce)避免頻繁觸發(fā):
import { debounce } from 'lodash-es';
const handleScroll = debounce((e) => { ... }, 200);

?完整示例項(xiàng)目結(jié)構(gòu)?

electron-vite-vue3-project/
├── src/
│   ├── main/           # Electron 主進(jìn)程代碼
│   ├── renderer/       # Vue 渲染進(jìn)程代碼
│   │   └── components/
│   │       └── InfiniteScroll.vue  # 觸底加載組件
│   └── preload.js
└── vite.config.js

?常見問題?

  • ?Q:滾動(dòng)事件不觸發(fā)???
    A:確保容器有固定高度和 overflow-y: auto。
  • ?Q:數(shù)據(jù)重復(fù)加載???
    A:檢查 loadingnoMore 的狀態(tài)鎖。
  • ?Q:Electron 中跨域請(qǐng)求失敗???
    A:在主進(jìn)程配置 webSecurity: false(僅限開發(fā)環(huán)境)。

通過以上方法,可以輕松在 Electron-Vite + Vue 3 中實(shí)現(xiàn)流暢的觸底加載效果!

到此這篇關(guān)于?Electron-Vite + Vue 3? 項(xiàng)目中實(shí)現(xiàn)觸底加載更多的文章就介紹到這了,更多相關(guān)vue觸底加載更多內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue路由傳參-如何使用encodeURI加密參數(shù)

    vue路由傳參-如何使用encodeURI加密參數(shù)

    這篇文章主要介紹了vue路由傳參-如何使用encodeURI加密參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue.js最佳實(shí)踐(五招助你成為vuejs大師)

    Vue.js最佳實(shí)踐(五招助你成為vuejs大師)

    這篇文章主要介紹了Vue.js最佳實(shí)踐,本文主要面向?qū)ο笫怯幸欢╲ue.js 編輯經(jīng)驗(yàn)的開發(fā)者,需要的朋友可以參考下
    2018-05-05
  • 利用Vue實(shí)現(xiàn)一個(gè)累加向上漂浮動(dòng)畫

    利用Vue實(shí)現(xiàn)一個(gè)累加向上漂浮動(dòng)畫

    在不久之前,看到一個(gè)比較有意思的小程序,就是靜神木魚,可以實(shí)現(xiàn)在線敲木魚,自動(dòng)敲木魚,手盤佛珠,靜心頌缽的,下面就來揭秘如何實(shí)現(xiàn)這個(gè)小程序中敲木魚的累加向上漂浮動(dòng)畫,需要的可以參考一下
    2022-11-11
  • vue-router 路由傳參問題(路由傳參方式)

    vue-router 路由傳參問題(路由傳參方式)

    路由傳參主要有兩種方式一種是路徑傳參一種是參數(shù)傳遞,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • 解析Vue2 dist 目錄下各個(gè)文件的區(qū)別

    解析Vue2 dist 目錄下各個(gè)文件的區(qū)別

    本篇文章主要介紹了解析Vue2 dist 目錄下各個(gè)文件的區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • 在?Vue?中使用?dhtmlxGantt?組件時(shí)遇到的問題匯總(推薦)

    在?Vue?中使用?dhtmlxGantt?組件時(shí)遇到的問題匯總(推薦)

    dhtmlxGantt一個(gè)功能豐富的甘特圖插件,支持任務(wù)編輯,資源分配和多種視圖模式,這篇文章主要介紹了在?Vue?中使用?dhtmlxGantt?組件時(shí)遇到的問題匯總,需要的朋友可以參考下
    2023-03-03
  • vue的三種圖片引入方式代碼實(shí)例

    vue的三種圖片引入方式代碼實(shí)例

    這篇文章主要介紹了vue的三種圖片引入方式代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • vue使用混入定義全局變量、函數(shù)、篩選器的實(shí)例代碼

    vue使用混入定義全局變量、函數(shù)、篩選器的實(shí)例代碼

    本文主要是給大家分享利用混入mixins來實(shí)現(xiàn)全局變量和函數(shù)。這種方法優(yōu)點(diǎn)是ide會(huì)有方法、變量、篩選器提示。對(duì)vue中 利用混入定義全局變量、函數(shù)、篩選器的相關(guān)知識(shí)感興趣的朋友,跟隨小編一起看看吧
    2019-07-07
  • vuex存取值和映射函數(shù)使用說明

    vuex存取值和映射函數(shù)使用說明

    這篇文章主要介紹了vuex存取值和映射函數(shù)使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue data引入本地圖片的兩種方式小結(jié)

    vue data引入本地圖片的兩種方式小結(jié)

    今天小編就為大家分享一篇vue data引入本地圖片的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評(píng)論