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 相关文章推荐
斜45度寻路实现函数
Aug 20 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
jQuery中appendTo()方法用法实例
Jan 08 Javascript
JavaScript学习笔记之基础语法
Jan 22 Javascript
简单纯js实现点击切换TAB标签实例
Aug 23 Javascript
检查表单元素的值是否为空的实例代码
Jun 16 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
Dec 02 Javascript
jQuery弹出窗口简单实现代码
Mar 09 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
AngularJS中的路由使用及实现代码
Oct 09 Javascript
使用proxy实现一个更优雅的vue【推荐】
Jun 19 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制作静态网站的模板框架(二)
2006/10/09 PHP
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
php define的第二个参数使用方法
2013/11/04 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
javascript 节点遍历函数
2010/03/28 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python的Lambda函数用法详解
2019/09/03 Python
Python JSON编解码方式原理详解
2020/01/20 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
运行Python编写的程序方法实例
2020/10/21 Python
python链表类中获取元素实例方法
2021/02/23 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
涉外离婚协议书怎么写
2014/11/20 职场文书
企业承诺书格式范文
2015/04/28 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python