当前位置:首页 > 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 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <t…

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script src…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生改…

vue实现token

vue实现token

Vue 中实现 Token 认证的方法 在 Vue 中实现 Token 认证通常涉及前端与后端的交互,包括 Token 的获取、存储、发送和刷新等操作。以下是具体实现步骤: 获取 Token 用户登…

vue实现list

vue实现list

Vue 实现列表渲染 在 Vue 中,可以使用 v-for 指令来渲染列表。v-for 指令基于一个数组或对象来渲染一个列表,可以遍历数组或对象的属性。 基本列表渲染 <template>…