当前位置:首页 > VUE

vue动画实现全屏滚动

2026-02-23 13:12:12VUE

vue实现全屏滚动动画的方法

使用Vue实现全屏滚动动画可以通过多种方式完成,以下是几种常见的方法:

使用vue-fullpage.js

vue-fullpage.js是一个基于fullPage.js的Vue组件,专门用于实现全屏滚动效果。

安装依赖:

npm install vue-fullpage.js

基本用法:

vue动画实现全屏滚动

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

<script>
import fullPage from 'vue-fullpage.js'

export default {
  components: {
    fullPage
  },
  data() {
    return {
      options: {
        navigation: true,
        scrollBar: true
      }
    }
  }
}
</script>

使用原生CSS和Vue过渡

可以通过Vue的过渡系统结合CSS实现简单的全屏滚动效果。

<template>
  <div class="fullpage-container">
    <transition :name="transitionName">
      <div 
        v-for="(page, index) in pages" 
        :key="index"
        v-show="currentPage === index"
        class="page"
      >
        {{ page.content }}
      </div>
    </transition>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 0,
      transitionName: 'slide-up',
      pages: [
        { content: '第一屏内容' },
        { content: '第二屏内容' },
        { content: '第三屏内容' }
      ]
    }
  },
  methods: {
    nextPage() {
      if (this.currentPage < this.pages.length - 1) {
        this.transitionName = 'slide-up'
        this.currentPage++
      }
    },
    prevPage() {
      if (this.currentPage > 0) {
        this.transitionName = 'slide-down'
        this.currentPage--
      }
    }
  }
}
</script>

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

.page {
  position: absolute;
  width: 100%;
  height: 100vh;
  top: 0;
  left: 0;
}

.slide-up-enter-active, .slide-up-leave-active,
.slide-down-enter-active, .slide-down-leave-active {
  transition: all 0.5s ease;
}

.slide-up-enter {
  transform: translateY(100%);
}

.slide-up-leave-to {
  transform: translateY(-100%);
}

.slide-down-enter {
  transform: translateY(-100%);
}

.slide-down-leave-to {
  transform: translateY(100%);
}
</style>

使用swiper.js

swiper.js是一个强大的滑动库,可以与Vue集成实现全屏滚动效果。

vue动画实现全屏滚动

安装依赖:

npm install swiper vue-awesome-swiper

基本用法:

<template>
  <swiper ref="fullpageSwiper" :options="swiperOptions">
    <swiper-slide>第一屏内容</swiper-slide>
    <swiper-slide>第二屏内容</swiper-slide>
    <swiper-slide>第三屏内容</swiper-slide>
  </swiper>
</template>

<script>
import { Swiper, SwiperSlide } from 'vue-awesome-swiper'
import 'swiper/css/swiper.css'

export default {
  components: {
    Swiper,
    SwiperSlide
  },
  data() {
    return {
      swiperOptions: {
        direction: 'vertical',
        slidesPerView: 1,
        mousewheel: true,
        pagination: {
          el: '.swiper-pagination',
          clickable: true
        }
      }
    }
  }
}
</script>

<style>
.swiper-container {
  height: 100vh;
}
</style>

自定义实现

对于更简单的需求,可以完全自定义实现:

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

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

<style>
.fullpage {
  height: 100vh;
  overflow: hidden;
}

.page {
  height: 100vh;
  transition: transform 0.5s ease;
}
</style>

选择建议

  1. 需要快速实现且功能丰富时,推荐使用vue-fullpage.js或swiper.js
  2. 需要高度自定义效果时,建议使用原生CSS和Vue过渡
  3. 项目规模较小时,可以考虑完全自定义实现

每种方法都有其适用场景,根据项目需求和开发复杂度选择最合适的方案。

标签: 全屏动画
分享给朋友:

相关文章

vue实现动画效果

vue实现动画效果

Vue 实现动画效果的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及 CSS 动画。以下是几种常见的方法: 使用 Vue 内置的过渡系统 Vue 的 <tra…

vue实现翻页动画

vue实现翻页动画

实现翻页动画的基本思路 在Vue中实现翻页动画通常需要结合CSS过渡或动画效果。可以通过Vue的过渡组件<transition>或<transition-group>来实现页面…

vue实现点击全屏

vue实现点击全屏

实现点击全屏功能 在Vue中实现点击全屏功能可以通过浏览器的Fullscreen API完成。以下是一个完整的实现方案: 安装screenfull依赖 Screenfull是一个跨浏览器的全屏API…

vue动画怎么实现

vue动画怎么实现

Vue动画的实现方式 Vue提供了多种方式来实现动画效果,包括内置的过渡和动画系统,以及第三方动画库的集成。以下是几种常见的实现方法: 使用Vue的过渡系统 Vue的<transition&…

vue实现动画原理

vue实现动画原理

Vue 动画实现原理 Vue 的动画系统基于 CSS 过渡和动画,同时结合了 JavaScript 钩子函数。其核心是通过内置组件 <transition> 和 <transitio…

vue实现ppt动画

vue实现ppt动画

Vue实现PPT动画的基本思路 使用Vue实现PPT动画效果,可以通过动态绑定CSS类、结合过渡动画和第三方库来实现。Vue的响应式特性非常适合处理动态内容切换和动画效果。 使用Vue过渡动画实现单…