滚动行为

使用前端路由,当切换到新路由时,想要页面滚动到顶部或者是保持原先的滚动位置,就像重新加载页面那样。

vue-router能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。

注意:这个功能只在支持 history.pushState 的浏览器中可用。

当创建一个Router实例,你可以提供一个scrollBehavior方法

const router = new VueRouter({
routes: [...],
scrollBehavior (to, from, savedPosition) {
// return 期望滚动到哪个的位置
// to:要进入的目标路由对象,到哪里去ss
console.log(to)
// from:离开的路由对象,从哪儿来
console.log(from)
// savedPosition: 会记录滚动条的坐标,点击"后退/前进" 时的记录值(x:?,y:?)
console.log(savedPosition)
}
})

scrollBehavior方法接收 tofrom 路由对象。第三个参数 savedPosition当且仅当 popstate 导航(通过浏览器的 前进/后退 按钮触发)时才可用。

该方法返回滚动位置信息,如下所示:

  • { x: number, y: number }
  • { selector: string, offset? : { x: number, y: number }} (offset 只在 2.6.0+ 支持)

如果返回一个falsy值(falsy不是false,参考文档),或者是一个空对象,那么不会发生滚动。

举例:

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

对于所有路由导航,简单的让页面滚动到顶部。

返回 savePosition ,在按下 后退/前进 按钮时,就会像浏览器的原生表现那样:

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

如果你要模拟“滚动到锚点”的行为:

scrollBehavior (to, from, savedPosition) {
if (to.hash) {
return {
selector: to.hash
}
}
}

还可以利用路由元信息更细颗粒度的控制滚动。详细例子请移步这里

异步滚动

2.8.0 新增

scrollBehavior (to,from,savedPosition) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({x:0,y:0})
},500)
})
}

将其挂在到从页面级别的过渡组件的事件上,令其滚动行为和页面过渡行为一起良好运行是可能的。但是考虑到用例的多样性和复杂性,我们仅提供这个原始的借口,以支持不同用户场景的具体实现。

具体实现例子


const HomePage = () => import('@/page/homePage/HomePage-2.0'); /* 首页 */ const ProductDetail = () => import('@/page/serviceProvider/ProductDetail'); /* 主要产品详情 */ const scrollBehavior = (to, from, savedPosition) => {
let returnData = {}
if(savedPosition){
returnData = savedPosition
}
else{
returnData.x = 0
returnData.y = 0
}
return returnData
} export default new Router({
mode: 'history',
scrollBehavior,
routes: [
{
path: '/',
name: 'HomePage',
component: HomePage, /* 首页 */
children: [
{
path: '/ProductDetail',
name: 'ProductDetail',
component: ProductDetail, /* 产品详情 */
},
]
}
]
})

Vue Router滚动行为 scrollBehavior的更多相关文章

  1. Vue技术点整理-Vue Router

    路由 Vue Router 对于单页面应用来说,如果涉及到多个页面的话,就必须要使用到路由,一般使用官方支持的 vue-router 库 一,Vue Router 在项目中的安装引用 1,在页面中使用 ...

  2. vue Router——进阶篇

    vue Router--基础篇 1.导航守卫 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的 ...

  3. Vue.js路由管理器 Vue Router

    起步 HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <script s ...

  4. 深入浅出的webpack构建工具--webpack4+vue+router项目架构(十四)

    阅读目录 一:vue-router是什么? 二:vue-router的实现原理 三:vue-router使用及代码配置 四:理解vue设置路由导航的两种方法. 五:理解动态路由和命名视图 六:理解嵌套 ...

  5. 每日技术总结:vue router传参方式,js获取设备高度

    今天貌似没什么问题,23333…… 1.vue router 路由传参的方式 应用情景:从分类页(category.vue)进入商品列表页(list.vue),需要传递商品分类id(catId),商品 ...

  6. Vue 2.0 + Vue Router + Vuex

    用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...

  7. vue router 只需要这么几步

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. Vue.js 2.x笔记:路由Vue Router(6)

    1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...

  9. Vue Router学习笔记

    前端的路由:一个地址对应一个组件 Vue Router中文文档 一.路由基本使用 第1步:导入Vue Router: <script src="https://unpkg.com/vu ...

随机推荐

  1. 音频科普---oggs

    做为一个做音频的人,很多基础的东西还是要牢记的.最近一个客户用ogg格式的音频,感觉这个很陌生,就翻了这方面的 资料.好比是认识一个大牛,只有在你有一个困扰你很久的困难问题被他瞬间解决的时候,才知道什 ...

  2. HDU 6044--Limited Permutation(搜索+组合数+逆元)

    题目链接 Problem Description As to a permutation p1,p2,⋯,pn from 1 to n, it is uncomplicated for each 1≤ ...

  3. 用Eclipse导入Maven工程

     步骤一 : 选择 “Import”操作 有两个途径可以选择 “Import”操作; 1>“File”--> "Import..." 2> 在 "Pro ...

  4. python zip压缩文件 并移动到指定目录

    需要引入的3个包: import os import shutil import zipfile 1. # 创建zip文件对象your_zip_file_obj = zipfile.ZipFile(' ...

  5. 21天打造分布式爬虫-Spider类爬取糗事百科(七)

    7.1.糗事百科 安装 pip install pypiwin32 pip install Twisted-18.7.0-cp36-cp36m-win_amd64.whl pip install sc ...

  6. 监督学习Supervised Learning

    In supervised learning, we are given a data set and already know what our correct output should look ...

  7. Linux编程 7 (实时监测进程 top, 结束进程kill,killall)

    一. 实时监测进程 top 在一篇里讲到ps命令在收集进程信息时非常有用,但它只能显示某个特定时间点的信息.想要观察那些频繁换进换出的内存进程趋势,用top命令是合适的.使用top命令如下图所示: 在 ...

  8. [git与github]__git与github简单了解

    前言 关于版本控制,版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 我们通过版本控制系统可以解决的问题:可以非常方便的查看我们的源码文件的历代更新版本.或将我们的项目源 ...

  9. 给linux系统配置网络

    修改/etc/sysconfig/network-scripts/ifcfg-eth0 ip地址变量:IPADDR子网掩码变量:NETMASK如果本机和linux 网段不相同 如:192.168.8. ...

  10. Spark RDD转换为DataFrame

    #构造case class,利用反射机制隐式转换 scala> import spark.implicits._ scala> val rdd= sc.textFile("inp ...