当前位置:首页 > 技术文章 > 正文内容

vue router 的滚动行为(vue滚动事件获取元素位置)

zonemu1周前 (07-26)技术文章5

在 Vue 项目里,Vue Router 的滚动行为能对路由切换时的滚动位置进行控制,下面为你介绍它的常见使用场景和配置方法:

基本配置

在创建 Vue Router 实例时,可以通过scrollBehavior函数来配置滚动行为:

// router/index.js
const router = createRouter({
  history: createWebHistory(),
  routes: [...],
  scrollBehavior(to, from, savedPosition) {
    // 返回滚动位置的对象信息
    // { x: number, y: number }
    // { selector: string, offset? : { x: number, y: number } }
  }
})

常见使用场景

1. 恢复到之前的滚动位置

用户进行后退 / 前进操作时,页面会恢复到之前的滚动位置,这和浏览器的默认行为是一样的:

scrollBehavior(to, from, savedPosition) {
  if (savedPosition) {
    return savedPosition;
  } else {
    return { x: 0, y: 0 };
  }
}

2. 每次都滚动到页面顶部

不管是首次加载页面,还是进行路由切换,页面都会滚动到顶部:

scrollBehavior() {
  return { x: 0, y: 0 };
}

3. 滚动到锚点位置

路由切换到带锚点的 URL 时,页面会滚动到对应的元素位置:

scrollBehavior(to, from, savedPosition) {
  if (to.hash) {
    return {
      selector: to.hash,
      behavior: 'smooth', // 平滑滚动
    };
  }
}

4. 延迟滚动(适用于动态加载内容的情况)

有些页面内容是动态加载的,这时可以等内容加载完成后再执行滚动操作:

scrollBehavior(to, from, savedPosition) {
  return new Promise((resolve) => {
    // 等待DOM更新
    nextTick(() => {
      resolve({ x: 0, y: 0 });
    });
  });
}

5. 基于路由元信息的滚动控制

你可以在路由配置中添加meta字段,从而实现更灵活的滚动控制:

// 路由配置
const routes = [
  {
    path: '/home',
    component: Home,
    meta: { scrollToTop: true }
  }
];

// 滚动行为配置
scrollBehavior(to, from, savedPosition) {
  if (to.meta.scrollToTop) {
    return { x: 0, y: 0 };
  }
}

实际应用建议

  • 平滑滚动:可以通过 CSS 或者设置behavior: 'smooth'来实现平滑滚动效果:

组件内控制:除了全局配置,你还可以在组件内部通过监听路由变化来控制滚动位置:

watch: {
  $route(to, from) {
    // 滚动到页面顶部
    window.scrollTo(0, 0);
  }
}
  • 异步滚动:处理异步加载内容时,要确保在内容渲染完成之后再执行滚动操作。


相关文章

2020年最漂亮的7个Linux发行版(最受欢迎的linux发行版)

请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言对于想学习Linux的朋友们,心中一定有疑问,哪个Linux版本比较好入门,Li...

微软的Linux发行版终于加入了对XFS根文件系统的支持

当许多Linux发行版在评估新的根文件系统选项或甚至像OpenZFS这样的特性,微软内部Linux发行版到本月才开始支持XFS作为根文件系统选项。随着这个月对微软内部Linux发行版CBL-Marin...

Vue3 如何实现父子组件传值?(vue父子组件传值props)

在Vue 3中,要实现父子组件传值效果主要通过props和emit两种机制来实现,下面我们就来详细介绍一下这两种机制。父组件向子组件传值propsprops是Vue组件的一种机制,主要的作用就是实现从...

Vue3 中,父子组件如何传递参数?(vue父子组件传递数据方法)

在 Vue3 中,组件化开发是非常重要的特征,那么组件之间传值就是开发中常见的需求了。组件之间的传值三种方式:父传子、子传父、非父子组件传值。一、父传子( defineProps )父组件主要通过使用...

Vue3开发极简入门(14):组件间通信之props、ref&defineExpose

组件间的关系可以分为:父子关系。以前文的代码为例,最典型的就是App.vue与Car.vue这种,APP是父,Car是子。祖孙关系。如果Car再引入一个子组件,这个子组件与App就是祖孙关系。其他。比...

快速上手React(快速上手的高级表达)

web前端三大主流框架1、Angular大家眼里比较牛的框架,甚至有人说三大框架中只有它能称得上一个完整的框架,因为它包含的东西比较完善,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等...