当前位置:首页 > VUE

vue实现全屏滚动

2026-01-14 07:05:29VUE

Vue 实现全屏滚动的方法

全屏滚动效果可以通过多种方式实现,以下是几种常见的方法:

使用 vue-fullpage.js

vue-fullpage.js 是一个基于 fullPage.js 的 Vue 组件,可以轻松实现全屏滚动效果。

安装依赖:

npm install vue-fullpage.js

在 Vue 项目中引入并使用:

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',
        navigation: true,
        anchors: ['page1', 'page2', 'page3']
      }
    }
  }
}
</script>

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

使用原生 CSS 和 Vue 实现

可以通过 CSS 的 overflow: hiddenheight: 100vh 属性结合 Vue 的滚动事件监听实现基本全屏滚动效果。

vue实现全屏滚动

<template>
  <div class="container" @wheel="handleWheel">
    <div 
      class="page" 
      v-for="(page, index) in pages" 
      :key="index"
      :style="{ transform: `translateY(${-currentIndex * 100}vh)` }"
    >
      {{ page }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      pages: ['第一屏', '第二屏', '第三屏'],
      currentIndex: 0,
      isScrolling: false
    }
  },
  methods: {
    handleWheel(e) {
      if (this.isScrolling) return

      this.isScrolling = true

      if (e.deltaY > 0 && this.currentIndex < this.pages.length - 1) {
        this.currentIndex++
      } else if (e.deltaY < 0 && this.currentIndex > 0) {
        this.currentIndex--
      }

      setTimeout(() => {
        this.isScrolling = false
      }, 1000)
    }
  }
}
</script>

<style>
.container {
  height: 100vh;
  overflow: hidden;
  position: relative;
}

.page {
  height: 100vh;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 3em;
  transition: transform 0.5s ease;
}
</style>

使用 vue-scroll-snap 插件

vue-scroll-snap 是一个轻量级的 Vue 插件,可以实现类似 iOS 的滚动吸附效果。

安装:

npm install vue-scroll-snap

使用示例:

<template>
  <vue-scroll-snap :fullscreen="true">
    <div class="item">第一屏</div>
    <div class="item">第二屏</div>
    <div class="item">第三屏</div>
  </vue-scroll-snap>
</template>

<script>
import VueScrollSnap from 'vue-scroll-snap'

export default {
  components: {
    VueScrollSnap
  }
}
</script>

<style>
.item {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 3em;
}
</style>

注意事项

  1. 移动端适配需要考虑 touch 事件的处理
  2. 性能优化:避免在滚动过程中进行大量 DOM 操作
  3. 浏览器兼容性:某些 CSS 属性可能需要前缀
  4. 滚动节流:防止快速滚动导致的多次触发

以上方法可以根据项目需求选择适合的实现方式,vue-fullpage.js 功能最全面但体积较大,原生实现最轻量但功能较少。

标签: 全屏vue
分享给朋友:

相关文章

vue卖座网实现

vue卖座网实现

Vue 卖座网实现 项目结构搭建 使用 Vue CLI 快速初始化项目,安装必要依赖如 Vue Router、Vuex、Axios。 创建核心目录结构:components(通用组件)、views(页…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…

vue实现尺子

vue实现尺子

Vue 实现尺子组件 实现一个尺子组件可以通过 Canvas 或纯 CSS 完成。以下是两种常见实现方式: 使用 Canvas 绘制尺子 通过 Canvas 动态绘制刻度线和数字,适合需要高精度或动…

vue实现反馈

vue实现反馈

Vue 实现反馈功能的方法 在 Vue 中实现反馈功能可以通过多种方式,包括弹窗提示、Toast 消息、表单提交等。以下是几种常见的实现方法。 弹窗反馈 使用 Vue 的组件化特性创建一个弹窗组件,…

vue ui实现创建vue项目

vue ui实现创建vue项目

使用 Vue UI 创建 Vue 项目 Vue UI 是 Vue CLI 提供的图形化界面工具,可以通过可视化操作创建和管理 Vue 项目。 安装 Vue CLI 确保已安装 Node.js(建议版…