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 相关文章推荐
javascript实现划词标记+划词搜索功能
Mar 06 Javascript
javaScript 利用闭包模拟对象的私有属性
Dec 29 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
jquery中val()方法是从最后一个选项往前读取的
Sep 06 Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
详解AngularJS中ng-src指令的使用
Sep 07 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
Aug 24 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
理理Vue细节(推荐)
Apr 16 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 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 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
php创建图像具体步骤
2017/03/13 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
javascript实现图片切换的幻灯片效果源代码
2012/12/12 Javascript
jquery中radio checked问题
2015/03/16 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
AngularJS directive返回对象属性详解
2016/03/28 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
微信小程序实现选项卡功能
2020/06/19 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
Python查看多台服务器进程的脚本分享
2014/06/11 Python
python实现ping的方法
2015/07/06 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
使用python实现回文数的四种方法小结
2019/11/24 Python
python3 字符串知识点学习笔记
2020/02/08 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
电子商务专业个人的自我评价
2013/12/19 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
教师个人年度总结
2015/02/11 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python