vue通过滚动行为实现从列表到详情,返回列表原位置的方法


Posted in Javascript onAugust 31, 2018

vue项目滚动行为

场景:项目中,从列表进入详情,再从详情返回列表时,想直接定位到离开时的位置。

列表页点击某一个进入到详情页:

vue通过滚动行为实现从列表到详情,返回列表原位置的方法

进入到详情页:

vue通过滚动行为实现从列表到详情,返回列表原位置的方法

从详情页点击返回到列表页到离开的位置:

vue通过滚动行为实现从列表到详情,返回列表原位置的方法

实现方式一:html5 history模式

1在路由设置router/index.js中,设置组件的元信息被缓存。(keepAlive:true),并修改mode模式为history。

export defaultnewRouter({
mode: 'history' // 默认hash
 routes: [
// ***************** 列表组件 ******************** //
 {
  path: '/',
  name: list,
  component: list,
  meta: {
  keepAlive: true
  }
 }

2该组件路由被匹配显示的方式:

<keep-alive>
 <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

实现方式二:监听scrollTop, js原始写法(组件同样需要设置缓存keep-alive)

1在组件的data中定义一个scrollTop属性,用来记录监听的scrollTop。

2在created或者mounted钩子里添加监听事件。

mounted () {
 document.addEventListener('scroll',this.handelscroll)
},

3在methods方法中定义这个handelscroll方法,并将监听的scrollTop赋值给data中的scrollTop()

handelscroll() {
 this.scrollTop = document.body.scrollTop|| document.documentElement.scrollTop || window.pageYOffset
},

4在deactivated钩子里记录当前的scrolltop(即从列表页进入详情页)

deactivated (){
 sessionStorage.setItem('scrollTop',this.scrollTop)
},

这里存到了sessionStorage里边,也可以使用状态管理。

5在activated钩子里,定位保存的scrollTop(即从详情页返回列表页)

activated () {
 document.body.scrollTop =document.documentElement.scrollTop = window.pageYOffset =sessionStorage.getItem('scrollTop')
},

以上这篇vue通过滚动行为实现从列表到详情,返回列表原位置的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JSDoc 介绍使用规范JsDoc的使用介绍
Feb 12 Javascript
JS正则表达式获取分组内容的方法详解
Nov 15 Javascript
js改变鼠标的形状和样式的方法
Mar 31 Javascript
JavaScript实现的石头剪刀布游戏源码分享
Aug 22 Javascript
Node.js中的模块机制学习笔记
Nov 04 Javascript
JS实现IE状态栏文字缩放效果代码
Oct 24 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
Oct 10 Javascript
jQuery电话号码验证实例
Jan 05 Javascript
你不知道的 javascript【推荐】
Jan 08 Javascript
ng2学习笔记之bootstrap中的component使用教程
Mar 09 Javascript
vue非父子组件通信问题及解决方法
Jun 11 Javascript
详解React路由传参方法汇总记录
Nov 29 Javascript
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 #Javascript
javascript闭包的使用之按钮切换功能
Aug 30 #Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 #Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 #Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 #Javascript
vue-router动态设置页面title的实例讲解
Aug 30 #Javascript
解决vue select当前value没有更新到vue对象属性的问题
Aug 30 #Javascript
You might like
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
分享php分页的功能模块
2015/06/16 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python根据日期返回星期几的方法
2015/07/06 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
介绍一下Mysql的存储引擎
2015/02/12 面试题
怎么写自荐书范文
2014/02/12 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
Mysql - 常用函数 每天积极向上
2021/04/05 MySQL
详解Python类和对象内容
2021/06/22 Python
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android