vue项目如何使页面后退不刷新,且还原滚动条位置

本文主要是介绍vue项目如何使页面后退不刷新,且还原滚动条位置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       新指令化管理滚动状态地址https://blog.csdn.net/theoneEmperor/article/details/82669022(欢迎star),滚动条保存以及回退只需要一条指令,让你为所欲为。

        最近学了下node,自己用vue和node弄了个项目。在首页跳到详情页,然后从详情页再跳回来的时候,发现总是要刷新页面,这样对用户操作很不友好,意味着用户不能从上次离开的时候开始浏览,体验极差。我就想能不能回退不刷新,并且记录滚动条的位置,进行复原。

用到keep-alive做缓存的情况

       于是就利用了官网上的keep-alive,把要缓存的页面包裹起来。可能有写界面不需要缓存,那么可以把状态写在路由里面进行控制,例如:

// router.js
{ path: '/register', name: 'register', component: register, meta: { keepAlive: false } },
// App.vue 动画的实现,就交给大家集思广益了
<transition :name="transitionName" mode="out-in"><keep-alive><router-view class="child-view" v-if="$route.meta.keepAlive"></router-view> </keep-alive>
</transition>
<transition :name="transitionName" mode="out-in"><router-view class="child-view" v-if="!$route.meta.keepAlive"></router-view> </transition>

false表示不需要缓存,true表示需要缓存。使用后,发现页面是缓存了,但是滚动条还是个问题。

解决方案:离开之前先把滚动条位置存起来,就是dom的scrollTop,scrollLeft属性,看你的需求来,如果保存有效期只保存到整个vue实例的创建和销毁,也就是app的打开和关闭,可以存进vuex里面,自己写套规则也行。如果向保存久点,丢进localStorage,浏览器数据库等等都行。回来的时候再把它取出来滚动到相应位置就行了。这时候就需要区分滚动条的类型了,分为window全局滚动条和局部滚动条。

created () {this.$nextTick(() => {window.scrollTo(x, y); // 全局滚动条// 局部滚动dom.scrollTop = x;dom.scrollLeft = y;})
}

如果this.$nextTick失效,不能滚动到目标位置,可以试着用setTimeout包裹,不过极大几率会有从0跳动到目标位置一闪的瞬间,解决方案放到下面一起讲。

不用keep-alive

        对于分页加载的列表一定要用keep-alive,或者用我最上面推荐的那个插件里面介绍的写法(ps: 超简便),但是列表页的数据一定要保存起来,回退不能刷新数据,如果是详情页的就没必要保存了,具体看那篇文章吧,这样比keep-alive好点。因为如果你遇到还有tab切换的选项卡型多列表共用一个滚动条现象就比较麻烦了。

       对于一般的不分页的,如果不用keep-alive,也会存在从0到目标位置的闪动,视觉效果极差,可以做一些平滑处理。可以路由切换时加个极短时间的动画,来完美错过这个跳动的时间。还可以加一些请求时的loading动画,效果最好的是加在初始化请求的axios拦截器里(ps:假设你用的是axios),效果非常好。好的动画插件比如:animate.css等,vue的官网上都有推荐。就用到了官网给出的transition。多个页面,直接用多个transition包裹,名字保持一致就好了,具体代码:

 <transition :name="transitionName" mode="out-in"><router-view class="child-view"></router-view>
</transition>

如果是全局滚动条的话,可以往其函数里传入options来平滑过渡,具体如下:

window.scrollTo({top: x,left: y,behavior: 'smooth'
});

到这里,就差不多解决了。无时不在,欢迎讨论。

仓库地址:传送门

演示地址:传送门 (由于我这里只存放在当前实例上,所以刷新浏览器无效,请滑动到一定距离,进详情页,后退,或者直接在详情页查看)

 

这篇关于vue项目如何使页面后退不刷新,且还原滚动条位置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856775

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo