Vue FullPage.js 完整使用指南:Vue 3 官方全屏滾動解決方案

概述

vue-fullpage.js 是 FullPage.js 的官方 Vue.js 3 包裝器,為 Vue 3 應用提供了強大的全屏滾動功能。該插件基于成熟的 FullPage.js 庫,支持多種滾動效果和豐富的配置選項,特別適用于企業級數據大屏、產品展示、單頁應用等場景。

官方信息:

  • GitHub 倉庫:alvarotrigo/vue-fullpage.js

適用場景:

  • 企業數據可視化大屏
  • 領導駕駛艙系統
  • 產品功能演示頁面
  • 企業官網首頁
  • 多媒體展示應用

🚀 安裝與配置

1. 安裝依賴

# 使用 npm
npm install --save vue-fullpage.js# 使用 yarn
yarn add vue-fullpage.js# 使用 pnpm
pnpm add vue-fullpage.js

2. 在 main.ts 中全局注冊

import { createApp } from 'vue'
import App from './App.vue'
import VueFullPage from 'vue-fullpage.js'
import 'vue-fullpage.js/dist/style.css'const app = createApp(App)
app.use(VueFullPage)
app.mount('#app')

基礎使用

1. 基本結構

根據官方文檔,vue-fullpage.js 創建了一個 <full-page> 組件:

<template><div><full-page ref="fullpage" :options="options" id="fullpage"><!-- 第一屏 --><div class="section"><div class="screen-content"><h1>第一屏內容</h1></div></div><!-- 第二屏 --><div class="section"><div class="screen-content"><h1>第二屏內容</h1></div></div><!-- 第三屏 --><div class="section"><div class="screen-content"><h1>第三屏內容</h1></div></div></full-page></div>
</template><script setup lang="ts">
import { ref } from 'vue'// fullpage 引用
const fullpage = ref<any>(null)// 配置選項 - 支持所有 FullPage.js 選項
const options = ref({// 許可證(商業使用必需)licenseKey: 'YOUR_KEY_HERE', // 替換為您的許可證密鑰// 基礎配置navigation: true,           // 顯示導航點navigationPosition: 'right', // 導航點位置scrollingSpeed: 1000,       // 滾動速度(毫秒)easingcss3: 'ease-in-out',  // CSS3 緩動函數// 控制選項keyboardScrolling: true,    // 鍵盤控制touchSensitivity: 5,        // 觸摸靈敏度autoScrolling: true,        // 自動滾動fitToSection: true,         // 適配屏幕// 回調函數afterLoad: (origin: any, destination: any) => {console.log('切換到屏幕:', destination.index + 1)},onLeave: (origin: any, destination: any) => {console.log('離開屏幕:', origin.index + 1, '前往:', destination.index + 1)}
})
</script><style scoped>
/* 確保 fullpage 容器占滿整個視口 */
:deep(#fullpage) {position: fixed;top: 0;left: 0;width: 100%;height: 100vh;z-index: 1;
}/* 確保 section 占滿整個高度 */
:deep(.fp-section) {height: 100vh !important;
}.screen-content {width: 100%;height: 100%;display: flex;flex-direction: column;justify-content: center;align-items: center;padding: 24px;box-sizing: border-box;
}
</style>

高級功能

1. 自定義導航菜單

<template><!-- 自定義導航菜單 --><div class="top-nav-menu"><div class="nav-item" :class="{ active: currentSection === 0 }" @click="goToSection(0)"><div class="nav-icon">🏠</div><div class="nav-text">首頁</div></div><div class="nav-item" :class="{ active: currentSection === 1 }" @click="goToSection(1)"><div class="nav-icon">📊</div><div class="nav-text">數據</div></div><div class="nav-item" :class="{ active: currentSection === 2 }" @click="goToSection(2)"><div class="nav-icon">??</div><div class="nav-text">設置</div></div></div><full-page ref="fullpage" :options="options" id="fullpage"><!-- 屏幕內容 --></full-page>
</template><script setup lang="ts">
import { ref } from 'vue'const fullpage = ref<any>(null)
const currentSection = ref(0)// 菜單點擊處理函數
const goToSection = (sectionIndex: number) => {if (fullpage.value && fullpage.value.api) {fullpage.value.api.moveTo(sectionIndex + 1)}
}const options = ref({navigation: false, // 隱藏默認導航點afterLoad: (_origin: any, destination: any) => {currentSection.value = destination.index}
})
</script><style scoped>
.top-nav-menu {position: fixed;top: 20px;left: 20px;z-index: 1000;display: flex;gap: 8px;background: rgba(255, 255, 255, 0.95);backdrop-filter: blur(10px);border-radius: 12px;padding: 12px 16px;box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
}.nav-item {display: flex;align-items: center;gap: 8px;padding: 10px 14px;border-radius: 8px;cursor: pointer;transition: all 0.3s ease;color: #606266;
}.nav-item:hover {background: rgba(64, 158, 255, 0.1);color: #409eff;
}.nav-item.active {background: linear-gradient(135deg, #409eff, #66b3ff);color: white;
}
</style>

解決滾動重定向問題

在使用 Vue FullPage.js 時,可能會遇到以下問題:

  1. 頁面滾動被 Vue Router 的 scrollBehavior 重定向
  2. 瀏覽器默認滾動行為與 FullPage.js 沖突
  3. 移動端觸摸滾動事件干擾

解決方案

1. 路由配置優化
// router/index.ts
import { createRouter, createWebHistory, type RouterScrollBehavior } from 'vue-router'const router = createRouter({history: createWebHistory(),routes: [{path: '/dashboard',name: 'leadershipDashboard',component: () => import('@/views/LeadershipDashboard/LeadershipDashboard.vue'),meta: { disableScroll: true, // 標記需要禁用滾動的頁面fullPage: true }}],scrollBehavior: ((to, from, savedPosition) => {// 如果目標頁面需要禁用滾動,返回 falseif (to.meta.disableScroll) {return false}// 如果是從全屏頁面跳轉,重置滾動位置if (from.meta.fullPage) {return { top: 0, left: 0 }}// 其他情況保持默認行為if (savedPosition) {return savedPosition}return { top: 0, left: 0 }}) as RouterScrollBehavior
})export default router

隱藏 右下角 水印

1. CSS 方式隱藏水印
/* 在全局樣式文件或組件樣式中添加 */
/* 隱藏 fullPage.js 水印 - 方法一:通用選擇器 */
.fp-watermark,
.fp-watermark a,
[data-watermark],
.fp-watermark-text,
div[style*="position: fixed"][style*="bottom: 0"][style*="right: 0"] {display: none !important;visibility: hidden !important;opacity: 0 !important;
}/* 方法二:更精確的選擇器 */
div[style*="position: fixed"][style*="bottom: 0"][style*="right: 0"][style*="z-index: 999999"] {display: none !important;visibility: hidden !important;opacity: 0 !important;
}/* 方法三:針對特定類名 */
.fp-watermark,
.fp-watermark a,
.fp-watermark-text {display: none !important;visibility: hidden !important;opacity: 0 !important;pointer-events: none !important;
}

常見問題與解決方案

1. 圖表不顯示問題

問題描述: ECharts 圖表在全屏滾動頁面中無法正常顯示。

解決方案:

// 延遲初始化圖表,確保 DOM 元素已渲染
onMounted(() => {// 使用 nextTick 確保 DOM 更新完成nextTick(() => {setTimeout(() => {initChart()}, 100)})
})// 或者使用 ResizeObserver 監聽容器大小變化
const initChartWithObserver = () => {if (!chartRef.value) returnconst resizeObserver = new ResizeObserver(() => {if (chart.value) {chart.value.resize()}})resizeObserver.observe(chartRef.value)
}

2. 導航菜單層級問題

問題描述: 自定義導航菜單被 FullPage.js 容器遮擋。

解決方案:

/* 確保導航菜單在最上層 */
.top-nav-menu {position: fixed !important;top: 20px !important;left: 20px !important;z-index: 9999 !important; /* 高于 FullPage.js 的 z-index */background: rgba(255, 255, 255, 0.95) !important;backdrop-filter: blur(10px) !important;
}/* 確保 FullPage.js 容器不會覆蓋導航 */
:deep(#fullpage) {z-index: 1 !important;
}

3. 移動端觸摸滾動問題

問題描述: 移動端觸摸滾動與 FullPage.js 沖突。

解決方案:

// 移動端觸摸事件處理
const handleTouchStart = (e: TouchEvent) => {// 記錄觸摸開始位置touchStartY = e.touches[0].clientY
}const handleTouchMove = (e: TouchEvent) => {// 防止默認滾動行為e.preventDefault()
}// 在組件中添加觸摸事件監聽
onMounted(() => {document.addEventListener('touchstart', handleTouchStart, { passive: true })document.addEventListener('touchmove', handleTouchMove, { passive: false })
})

4. 內存泄漏問題

問題描述: 組件銷毀后 FullPage.js 實例未正確清理。

解決方案:

onBeforeUnmount(() => {// 1. 移除事件監聽器window.removeEventListener('resize', handleResize)document.removeEventListener('wheel', preventScroll)document.removeEventListener('touchmove', preventScroll)// 2. 銷毀 FullPage.js 實例if (fullpage.value && fullpage.value.api) {fullpage.value.api.destroy('all')}// 3. 清理圖表實例if (chart.value) {chart.value.dispose()}// 4. 清理觀察器if (watermarkObserver) {watermarkObserver.disconnect()}
})

5. 性能優化問題

問題描述: 大量數據或復雜圖表導致頁面卡頓。

解決方案:

// 使用虛擬滾動或分頁加載
const useVirtualScroll = () => {const visibleItems = ref(10)const itemHeight = 50const getVisibleData = (data: any[]) => {return data.slice(0, visibleItems.value)}const loadMore = () => {visibleItems.value += 10}return { visibleItems, getVisibleData, loadMore }
}// 圖表懶加載
const useLazyChart = () => {const isChartVisible = ref(false)const observer = new IntersectionObserver((entries) => {entries.forEach(entry => {if (entry.isIntersecting) {isChartVisible.value = trueobserver.disconnect()}})})return { isChartVisible, observer }
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96647.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件工程實踐一:Git 使用教程(含分支與 Gitee)

文章目錄目標一、快速上手1. Windows 安裝 Git2. 初始化 / 克隆二、核心概念速覽三、常用命令清單1) 查看狀態與差異2) 添加與提交3) 歷史與回溯4) 撤銷與恢復&#xff08;Git 2.23 推薦新命令&#xff09;5) 忽略文件四、分支與合并&#xff08;Branch & Merge&#xff09…

css`min()` 、`max()`、 `clamp()`

min() 用來計算多個數值中最小的那個&#xff0c;非常適合做自適應。 width: min(50vw, 500px) 50vw 表示 視口寬度的 50% 500px 表示 500px min(50vw, 500px) 表示會取兩者中 最小的那個 作為最終的寬度&#xff0c;。 使用場景 限制某個元素寬度不超過某個值&#xff1b; 響…

【WRF-VPRM 預處理器】HEG 安裝(服務器)-MRT工具替代

目錄 HEG 安裝 驗證 HEG 安裝與否 設置環境變量(建議) 命令行接口(Command Line Interface) hegtool 工具 hegtool 用法 Header File 格式 功能1:`gdtif` 工具 – MISR 數據處理 `gdtif` 使用方式 參數文件格式(Parameter File Format) 功能2:`resample` 工具 – 重采樣…

PyTorch 神經網絡

神經網絡是一種模仿人腦神經元鏈接的計算模型&#xff0c; 由多層節點組成&#xff0c; 用于學習數據之間的復雜模式和關系。神經網絡通過調整神經元之間的連接權重來優化預測結果&#xff0c;這個過程可以涉及到向前傳播&#xff0c;損失計算&#xff0c;反向傳播和參數更新。…

詳細解析蘋果iOS應用上架到App Store的完整步驟與指南

&#x1f4f1;蘋果商店上架全流程詳解 &#x1f469;?&#x1f4bb;想要將你的App上架到蘋果商店&#xff1f;跟隨這份指南&#xff0c;一步步操作吧&#xff01; 1?? 申請開發者賬號&#xff1a;訪問蘋果開發者網站&#xff0c;注冊并支付99美元年費&#xff0c;獲取開發者…

三維GIS開發實戰!Cesium + CZML 實現火箭飛行與分離的 3D 動態模擬

CZML是一種基于JSON的數據格式&#xff0c;專門用于在Cesium中描述3D場景和時間動態數據。本文將詳細介紹了CZML的特點&#xff08;JSON格式、時間動態性、層次結構等&#xff09;和基本組件&#xff0c;并給出了一個火箭發射的實例。通過搭建Cesium開發環境&#xff08;使用vi…

Spring Boot 深入剖析:BootstrapRegistry 與 BeanDefinitionRegistry 的對比

在 Spring Boot 的啟動過程中&#xff0c;BootstrapRegistry 和 BeanDefinitionRegistry 是兩個名為“Registry”卻扮演著截然不同角色的核心接口。理解它們的差異是深入掌握 Spring Boot 啟動機制和進行高級定制開發的關鍵。BootstrapRegistry public static ConfigurableAppl…

貪心算法應用:速率單調調度(RMS)問題詳解

Java中的貪心算法應用&#xff1a;速率單調調度(RMS)問題詳解 1. 速率單調調度(RMS)概述 速率單調調度(Rate Monotonic Scheduling, RMS)是一種廣泛應用于實時系統中的靜態優先級調度算法&#xff0c;屬于貪心算法在任務調度領域的經典應用。 1.1 基本概念 RMS基于以下原則&…

Cesium4--地形(OSGB到3DTiles)

1 OSBG OSGB&#xff08;OpenSceneGraph Binary&#xff09;是基于 OpenSceneGraph&#xff08;OSG&#xff09; 三維渲染引擎的二進制三維場景數據格式&#xff0c;廣泛用于存儲和傳輸傾斜攝影測量、BIM、點云等大規模三維模型&#xff0c;尤其在國產地理信息與智慧城市項目中…

多語言共享販賣機投資理財共享售賣機投資理財系統

多語言共享販賣機投資理財/共享售賣機分紅/充電寶/充電樁投資理財系統 采用thinkphp內核開發&#xff0c;支持注冊贈金、多級分銷&#xff0c;功能很基礎 修復后臺用戶列表管理 可自定義理財商品 多種語言還可以添加任意語言 源碼開源 多級分銷 注冊贈金等

[Windows] PDF 專業壓縮工具 v3.0

[Windows] PDF 專業壓縮工具 v3.0 鏈接&#xff1a;https://pan.xunlei.com/s/VOZwtC_5lCF-UF6gkoHuxWMoA1?pwdchg8# PDF 壓縮工具 3.0 新版功能特點 - 不受頁數限制&#xff01; 一、核心壓縮功能 1.多模式智能壓縮 支持 4 種壓縮模式&#xff1a;平衡模式&#xff08…

SHEIN 希音 2026 校招 內推 查進度

SHEIN 希音 2026 校招 內推 查進度 &#x1f3e2;公司名稱&#xff1a;SHEIN 希音 &#x1f4bb;招聘崗位&#xff1a;前端、后端、測試、產品、安全、運維、APP 研發、數據分析、設計師、買手、企劃、招商、管培生 &#x1f31f;內推碼&#xff1a;NTA2SdK &#x1f4b0;福利待…

ARM (6) - I.MX6ULL 匯編點燈遷移至 C 語言 + SDK 移植與 BSP 工程搭建

回顧一、核心關鍵字&#xff1a;volatile1.1 作用告訴編譯器&#xff1a;被修飾的變量會被 “意外修改”&#xff08;如硬件寄存器的值可能被外設自動更新&#xff09;&#xff0c;禁止編譯器對該變量進行優化&#xff08;如緩存到寄存器、刪除未顯式修改的代碼&#xff09;。本…

Vue中使用keep-alive實現頁面前進刷新、后退緩存的完整方案

Vue中使用keep-alive實現頁面前進刷新、后退緩存的完整方案 在Vue單頁應用中&#xff0c;路由切換時組件默認會經歷完整的銷毀-重建流程&#xff0c;這會導致兩個典型問題&#xff1a;從搜索頁跳轉到列表頁需要重新加載數據&#xff0c;而從詳情頁返回列表頁又希望保留滾動位置…

Visual Studio Code 安裝與更新故障排除:從“拒絕訪問”到成功恢復

Visual Studio Code 安裝與更新故障排除&#xff1a;從“拒絕訪問”到成功恢復的實踐分析 摘要&#xff1a; 本文旨在探討 Visual Studio Code (VS Code) 在安裝與更新過程中常見的故障&#xff0c;特別是涉及“拒絕訪問”錯誤、文件缺失以及快捷方式和任務欄圖標異常等問題。…

簡單UDP網絡程序

目錄 UDP網絡程序服務端 封裝 UdpSocket 服務端創建套接字 服務端綁定 運行服務器 UDP網絡程序客戶端 客戶端創建套接字 客戶端綁定 運行客戶端 通過上篇文章的學習&#xff0c;我們已經對網絡套接字有了一定的了解。在本篇文章中&#xff0c;我們將基于之前掌握的知識…

如何解決 pip install 安裝報錯 ModuleNotFoundError: No module named ‘requests’ 問題

Python系列Bug修復PyCharm控制臺pip install報錯&#xff1a;如何解決 pip install 安裝報錯 ModuleNotFoundError: No module named ‘requests’ 問題 摘要 在日常Python開發過程中&#xff0c;pip install 是我們最常用的依賴安裝命令之一。然而很多開發者在 PyCharm 控制臺…

解釋 ICT, Web2.0, Web3.0 這些術語的中文含義

要理解“ICT Web2.0”術語的中文含義&#xff0c;需先拆解為 ICT 和 Web2.0 兩個核心概念分別解析&#xff0c;再結合二者的關聯明確整體指向&#xff1a; 1. 核心術語拆解&#xff1a;中文含義與核心定義 &#xff08;1&#xff09;ICT&#xff1a;信息與通信技術 中文全稱&am…

IDEA版本控制管理之使用Gitee

使用Gitee如果之前沒用過Gitee&#xff0c;那么IDEA中應該長這樣&#xff08;第一次使用&#xff09;如果之前使用過Gitee&#xff0c;那么IDEA中應該長這樣這種情況&#xff0c;可以先退出Gitee&#xff0c;再拉取Gitee&#xff0c;退出Gitee方法見文章底部好&#xff0c;那么…

NLP(自然語言處理, Natural Language Processing)

讓計算機能夠理解、解釋、操縱和生成人類語言&#xff0c;從而執行有價值的任務。 關注社區&#xff1a;Hugging Face、Papers With Code、GitHub 是現代NLP學習不可或缺的資源。許多最新模型和代碼都在這里開源。 ①、安裝庫 pip install numpy pandas matplotlib nltk scikit…