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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p