当前位置:首页 > VUE

vue 实现平滑滚动

2026-03-10 10:38:21VUE

使用 scroll-behavior 属性

在 Vue 项目中,可以通过 CSS 的 scroll-behavior 属性实现平滑滚动。在全局样式文件或组件样式中添加以下代码:

html {
  scroll-behavior: smooth;
}

这种方法适用于页面内的锚点跳转,但无法自定义滚动速度或动画效果。

使用 Vue Router 的 scrollBehavior

在 Vue Router 中可以通过 scrollBehavior 方法实现路由切换时的平滑滚动。在路由配置文件中添加以下代码:

const router = new VueRouter({
  routes,
  scrollBehavior(to, from, savedPosition) {
    if (to.hash) {
      return {
        selector: to.hash,
        behavior: 'smooth'
      }
    }
    return { x: 0, y: 0, behavior: 'smooth' }
  }
})

这种方式支持锚点跳转和页面顶部滚动,behavior: 'smooth' 启用了平滑滚动效果。

使用 window.scrollTo API

对于需要编程控制的滚动,可以使用 window.scrollTo 方法:

window.scrollTo({
  top: 0,
  behavior: 'smooth'
})

或者滚动到特定元素位置:

vue 实现平滑滚动

const element = document.getElementById('target')
element.scrollIntoView({ behavior: 'smooth' })

使用第三方库

如果需要更复杂的滚动效果,可以考虑以下第三方库:

  1. vue-scrollto
    安装:

    npm install vue-scrollto

    使用:

    import VueScrollTo from 'vue-scrollto'
    Vue.use(VueScrollTo)

    示例:

    vue 实现平滑滚动

    <button v-scroll-to="'#target'">Scroll to Target</button>
  2. smooth-scroll
    安装:

    npm install smooth-scroll

    使用:

    import SmoothScroll from 'smooth-scroll'
    const scroll = new SmoothScroll('a[href*="#"]')

自定义滚动动画

对于完全自定义的滚动效果,可以使用 requestAnimationFrame 实现:

function smoothScrollTo(targetY, duration = 1000) {
  const startY = window.pageYOffset
  const distance = targetY - startY
  let startTime = null

  function animation(currentTime) {
    if (!startTime) startTime = currentTime
    const timeElapsed = currentTime - startTime
    const progress = Math.min(timeElapsed / duration, 1)
    window.scrollTo(0, startY + distance * easeInOutQuad(progress))
    if (timeElapsed < duration) requestAnimationFrame(animation)
  }

  function easeInOutQuad(t) {
    return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t
  }

  requestAnimationFrame(animation)
}

调用方式:

smoothScrollTo(500)  // 滚动到Y轴500px位置

标签: 平滑vue
分享给朋友:

相关文章

vue怎么实现选中删除

vue怎么实现选中删除

实现选中删除功能的方法 在Vue中实现选中删除功能通常涉及以下几个关键步骤: 数据绑定与选中状态管理 使用v-model或v-for指令绑定列表数据,结合复选框或单选按钮实现选中状态管理。例如:…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue实现文字

vue实现文字

Vue 中实现文字显示的方法 在 Vue 中实现文字显示可以通过多种方式,包括插值表达式、指令、组件等。以下是几种常见的实现方法: 插值表达式 使用双大括号 {{ }} 进行文本插值,这是 Vue…

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…