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 相关文章推荐
JQuery 入门实例1
Jun 25 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
Apr 21 Javascript
完美实现八种js焦点轮播图(下篇)
Apr 20 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
Jul 16 Javascript
浅谈angular4 ng-content 中隐藏的内容
Aug 18 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
Jan 03 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
Apr 03 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 Javascript
简单了解JavaScript arguement原理及作用
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
MySQL相关说明
2007/01/15 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
php 常用的系统函数
2017/02/07 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
Python分析学校四六级过关情况
2017/11/22 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python shelve模块实现解析
2019/08/28 Python
python 实现dict转json并保存文件
2019/12/05 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
全球度假村:Club Med
2017/11/27 全球购物
孝老爱亲模范事迹
2014/01/24 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
安全生产培训心得体会
2016/01/18 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
文明医院的标语集锦!
2019/07/24 职场文书