Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置


Posted in Javascript onMay 27, 2019

前提:

之前写过关于keep-Alive组件,来实现在列表页进入详情页后,后退,返回列表,显示上次访问的位置(原理就是缓存列表页数据来实现),目前发现另外一个问题,就是如果后台操作改变数据的状态,缓存的办法就会导致数据更新不及时导致一些页面错误(例如:商品疑问,在后台答复之后,不可以修改内容,前台更新不及时就会导致,前台显示可编辑,但实际状态是不可编辑了),所以又继续研究另外一种解决办法,scrollBehavior 来实现。

简介:

使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样。 vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动。

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

官方文档简介: 滚动行为

使用方法:

const router = new VueRouter({
 routes: [...],
 scrollBehavior (to, from, savedPosition) {
 // return 期望滚动到哪个的位置
 }
})

或者集成模式写法:

utils.js

export function scrollBehavior (to, from, savedPosition) {
 // return 期望滚动到哪个的位置
}

index.js

import Vue from 'vue'
import Router from 'vue-router'
import { scrollBehavior } from './utils'
Vue.use(Router)
const router = new Router({
 mode: 'history',
 scrollBehavior,
 routes: [
 ...routesPC,
 ...routesMO
 ]
})
export default router

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

在该方法内,可以通过判断路由to,from两个对象来做一些必要的判断;

savedPosition 参数是记录的上次滚动的位置;

通过return {x:number,y:number}来控制页面滚动的位置;

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

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

想要在后退时,滚动到上次滚动的位置,如果满足条件,savedPosition有值的情况下:

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

新增情况:异步滚动

当页面数据需要请求加载有延迟的情况下,页面如果直接滚动,会出现滚动后,页面数据请求回来,DOM重新渲染,滚动失效的情况;

所以官方文档给补充了异步滚动的方法:

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

这个会在返回后,有一定延迟再滚动,可以根据自己项目的具体情况进行一定修改,兼容;

注:我的项目mobile端数据加载使用的是vue-mugen-scroll滑动加载数据组件,网上没找到能触发它加载的方法,所以,在返回列表页后,数据刷新,只有一页数据,滚动到底,也找不到上次的数据,呜呜呜......所以还是没有解决我的问题,但是这个方法是很好的,只是使用情况,会有限制,记录一下,以备后用。

总结

以上所述是小编给大家介绍的Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
利用404错误页面实现UrlRewrite的实现代码
Aug 20 Javascript
jQuery+jqmodal弹出窗口实现代码分明
Jun 14 Javascript
firefox下frameset取不到值的解决方法
Sep 06 Javascript
写出高效jquery代码的19条指南
Mar 19 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
May 26 Javascript
js生成随机数方法和实例
Jan 17 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
Jan 17 Javascript
利用Three.js如何实现阴影效果实例代码
Sep 26 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
Dec 26 Javascript
vue.js中实现登录控制的方法示例
Apr 23 Javascript
关于微信小程序登录的那些事
Jan 08 Javascript
vue实现简单瀑布流布局
May 28 Javascript
通过jQuery学习js类型判断的技巧
May 27 #jQuery
实现高性能javascript的注意事项
May 27 #Javascript
图解javascript作用域链
May 27 #Javascript
node.js命令行教程图文详解
May 27 #Javascript
详解JavaScript中的坐标和距离
May 27 #Javascript
优化Vue项目编译文件大小的方法步骤
May 27 #Javascript
了解JavaScript表单操作和表单域
May 27 #Javascript
You might like
php自动适应范围的分页代码
2008/08/05 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
Python 对象中的数据类型
2017/05/13 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
python中shell执行知识点
2020/05/06 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
Python爬虫入门教程02之笔趣阁小说爬取
2021/01/24 Python
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
Android面试题附答案
2014/12/08 面试题
一套Delphi的笔试题二
2013/05/11 面试题
企事业单位求职者的自我评价
2013/12/28 职场文书
高中数学教学反思
2014/01/30 职场文书
校庆接待方案
2014/03/18 职场文书
留学经费担保书
2014/05/12 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
计算机毕业生求职信
2014/06/10 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
考察邀请函范文
2015/01/31 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书