当前位置:首页 > VUE

vue怎么实现全屏滚动

2026-01-21 19:00:32VUE

Vue 实现全屏滚动的方法

使用原生 CSS 和 Vue 实现

通过 Vue 的指令或组件结合 CSS 的 scroll-snap 属性,可以实现全屏滚动效果。这种方法不需要额外依赖库,适合简单场景。

<template>
  <div class="scroll-container">
    <div class="scroll-page" v-for="(page, index) in pages" :key="index">
      {{ page.content }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      pages: [
        { content: "Page 1" },
        { content: "Page 2" },
        { content: "Page 3" }
      ]
    };
  }
};
</script>

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

.scroll-page {
  height: 100vh;
  scroll-snap-align: start;
  display: flex;
  justify-content: center;
  align-items: center;
}
</style>

使用第三方库 vue-fullpage.js

vue-fullpage.js 是一个基于 FullPage.js 的 Vue 封装库,提供丰富的全屏滚动功能,包括动画、导航和回调。

安装依赖:

npm install vue-fullpage.js

示例代码:

<template>
  <full-page :options="options" ref="fullpage">
    <div class="section">First section</div>
    <div class="section">Second section</div>
    <div class="section">Third section</div>
  </full-page>
</template>

<script>
import VueFullPage from 'vue-fullpage.js';

export default {
  components: {
    'full-page': VueFullPage
  },
  data() {
    return {
      options: {
        licenseKey: 'YOUR_KEY_HERE',
        navigation: true,
        scrollOverflow: true
      }
    };
  }
};
</script>

使用 vue-scroll-snap

vue-scroll-snap 是一个轻量级库,专注于实现平滑的滚动吸附效果,适合移动端和简单全屏滚动需求。

安装依赖:

npm install vue-scroll-snap

示例代码:

<template>
  <vue-scroll-snap>
    <div class="page">Page 1</div>
    <div class="page">Page 2</div>
    <div class="page">Page 3</div>
  </vue-scroll-snap>
</template>

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

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

<style>
.page {
  height: 100vh;
  width: 100vw;
}
</style>

自定义滚动逻辑

通过监听滚动事件和计算当前视口位置,可以手动实现全屏滚动效果。这种方法灵活性高,但需要更多代码。

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

<script>
export default {
  data() {
    return {
      pages: [
        { content: "Page 1" },
        { content: "Page 2" },
        { content: "Page 3" }
      ],
      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;
}

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

注意事项

  • 移动端兼容性:部分滚动库可能需要额外处理触摸事件。
  • 性能优化:全屏滚动可能涉及大量 DOM 操作,建议使用虚拟滚动技术优化性能。
  • 导航支持:如果需要导航指示器或锚点跳转,推荐使用 vue-fullpage.js 等成熟库。

vue怎么实现全屏滚动

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

相关文章

vue实现滑动

vue实现滑动

Vue 实现滑动效果 使用 CSS 过渡和动画 通过 Vue 的 transition 组件结合 CSS 过渡或动画实现滑动效果。适用于简单的元素入场/离场滑动。 <template>…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…

vue实现主题

vue实现主题

Vue 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-c…