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

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

zonemu2个月前 (07-26)技术文章21

在 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);
  }
}
  • 异步滚动:处理异步加载内容时,要确保在内容渲染完成之后再执行滚动操作。


相关文章

Vue 2 和 Vue 3的区别(vue2和vue3的区别有哪些)

1.双向数据绑定原理不同Vue2 的双向数据绑定是利用ES5的一个APIObject.definePropert() 对数据进行劫持,结合发布订阅模式的方式来实现的。Vue3 中使用ES6的Proxy...

前端React面试基础系列(React基础篇)

本文阅读8分钟,喜欢的小伙伴可以持续关系小编哦1. 什么是受控组件和非受控组件?受控组件像表单元素在用户输入时,像<input> <select>等元素需要绑定一个 chang...

git的几种分支模式(git分支的概念)

编写代码,是软件开发交付过程的起点,发布上线,是开发工作完成的终点。代码分支模式贯穿了开发、集成和发布的整个过程,是工程师们最亲切的小伙伴。那如何根据自身的业务特点和团队规模来选择适合的分支模式呢?本...

15款测试html5响应式的在线工具(测试类h5)

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面...

使用HTML5+JS实现文字转语音(h5 文字转语音)

使用HTML5+JS实现文字转语音现在越来越多的视频采用了AI语音,下面给大家介绍几种简单的文字转语音的办法,完全免费的欧。使用HTML5语音合成API-SpeechSynthesis实现的文字转语音...

详解HTML5培训课程行业标准(html5课程总结)

需要HTML5培训必须先了解HTML5前景,没前景的职业,我们绝对不去入坑,这是正常人的思维。因此学习HTML5还的要多了解一些,目前HTML5技术已经日趋成熟,从国内热潮来看很多企业已开始使用,所以...