当前位置:首页 > VUE

vue实现fullpage

2026-01-12 22:15:57VUE

Vue 实现 FullPage 滚动效果

使用 vue-fullpage.js 库

安装 vue-fullpage.js 库,这是一个专为 Vue 设计的全屏滚动插件,基于 fullPage.js 实现。

npm install vue-fullpage.js

在 Vue 项目中引入并注册组件:

import Vue from 'vue'
import VueFullPage from 'vue-fullpage.js'

Vue.use(VueFullPage)

在模板中使用:

<template>
  <full-page :options="options">
    <div class="section">第一屏内容</div>
    <div class="section">第二屏内容</div>
    <div class="section">第三屏内容</div>
  </full-page>
</template>

<script>
export default {
  data() {
    return {
      options: {
        licenseKey: 'YOUR_KEY',
        scrollingSpeed: 700
      }
    }
  }
}
</script>

<style>
.section {
  text-align: center;
  font-size: 3em;
}
</style>

自定义实现全屏滚动

通过监听鼠标滚轮事件和触摸事件,结合 CSS transform 实现基础全屏滚动效果。

创建全屏滚动组件:

<template>
  <div class="fullpage-container" @wheel="handleWheel" @touchstart="handleTouchStart" @touchend="handleTouchEnd">
    <div class="section" v-for="(section, index) in sections" :key="index" :style="{ transform: `translateY(-${currentIndex * 100}%)` }">
      {{ section.content }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentIndex: 0,
      sections: [
        { content: '第一屏' },
        { content: '第二屏' },
        { content: '第三屏' }
      ],
      touchStartY: 0
    }
  },
  methods: {
    handleWheel(e) {
      if (e.deltaY > 0 && this.currentIndex < this.sections.length - 1) {
        this.currentIndex++
      } else if (e.deltaY < 0 && this.currentIndex > 0) {
        this.currentIndex--
      }
    },
    handleTouchStart(e) {
      this.touchStartY = e.touches[0].clientY
    },
    handleTouchEnd(e) {
      const touchEndY = e.changedTouches[0].clientY
      if (touchEndY < this.touchStartY && this.currentIndex < this.sections.length - 1) {
        this.currentIndex++
      } else if (touchEndY > this.touchStartY && this.currentIndex > 0) {
        this.currentIndex--
      }
    }
  }
}
</script>

<style>
.fullpage-container {
  overflow: hidden;
  height: 100vh;
}
.section {
  height: 100vh;
  transition: transform 0.5s ease;
}
</style>

使用 CSS scroll-snap

利用现代 CSS 的 scroll-snap 特性实现原生全屏滚动效果,性能较好但浏览器兼容性需要考虑。

<template>
  <div class="scroll-container">
    <div class="section">第一屏</div>
    <div class="section">第二屏</div>
    <div class="section">第三屏</div>
  </div>
</template>

<style>
.scroll-container {
  height: 100vh;
  overflow-y: scroll;
  scroll-snap-type: y mandatory;
}
.section {
  height: 100vh;
  scroll-snap-align: start;
}
</style>

结合 Vue Router

实现全屏滚动的同时保持路由状态,适合单页应用场景。

import Vue from 'vue'
import Router from 'vue-router'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About },
    { path: '/contact', component: Contact }
  ],
  scrollBehavior(to, from, savedPosition) {
    if (to.hash) {
      return { selector: to.hash }
    }
    return { x: 0, y: 0 }
  }
})

性能优化建议

减少每屏中的复杂 DOM 结构和大量图片,使用 CSS 动画代替 JavaScript 动画。对于内容较多的页面,考虑懒加载技术。在移动设备上,添加 touch-action: none 防止默认滚动行为冲突。

vue实现fullpage

标签: vuefullpage
分享给朋友:

相关文章

vue实现原理

vue实现原理

Vue 实现原理 Vue.js 的核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现原理的详细解析: 响应式系统 Vue 2.x 使用 Object.defineP…

vue 路由实现

vue 路由实现

Vue 路由实现方法 安装 Vue Router 使用 npm 或 yarn 安装 Vue Router 依赖包: npm install vue-router # 或 yarn add vue-…

vue实现下拉菜单

vue实现下拉菜单

实现下拉菜单的基本思路 使用Vue实现下拉菜单可以通过动态绑定v-show或v-if控制菜单显示隐藏,结合事件监听(如@click或@mouseenter)触发状态切换。以下是两种常见实现方式:…

vue实现tab标签

vue实现tab标签

Vue 实现 Tab 标签的方法 使用动态组件和 v-for 渲染标签 通过 v-for 循环生成标签页标题,结合 v-bind:class 动态切换激活状态。使用 v-show 或动态组件 <…

vue实现静态查询

vue实现静态查询

Vue 实现静态查询 在 Vue 中实现静态查询通常指不依赖后端接口,直接在前端处理数据筛选或搜索功能。以下是几种常见实现方式: 使用计算属性过滤数据 通过计算属性对静态数据进行筛选,适合简单查询…

vue实现检测数组

vue实现检测数组

Vue 中检测数组变化的方法 Vue 的响应式系统无法直接检测到数组的某些变化,因为 JavaScript 的限制。以下是一些解决方案: 使用 Vue.set 或 this.$set Vue…