JS实现页面滚动到关闭时的位置与不滚动效果_第1页
JS实现页面滚动到关闭时的位置与不滚动效果_第2页
JS实现页面滚动到关闭时的位置与不滚动效果_第3页
JS实现页面滚动到关闭时的位置与不滚动效果_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第JS实现页面滚动到关闭时的位置与不滚动效果目录滚动不滚动标题显而易见,要说两种情况:重新打开页面或者返回某个页面时滚动到上次离开时的位置,以及不滚动保持在顶部。

滚动

这也有两种情况:页面重新打开,与返回某个页面。

如果是前者,必定用cookie或者localStorage。或者麻烦一点的、在webview中用其他手段。总之这个必须有存储。

然后在组件的activited或是window.onload时取出存储内容改变scrollTop。非常牛逼。

对于原生页面,如果在关键位置没有图片和表格,可以尝试在onreadystatechange中完成,不必等到onload。

关于这点,背景和降级处理等具体可以参考笔者的这篇文章:点击跳转

若是第二种情况,则只需要临时缓存即可,这里拿vue演示一下:

有两个方案。其一,利用路由中的meta,在离开页面时缓存top信息

//router/index.js

path:"/user",

name:"user",

component:()=import("../views/user.vue"),

meta:{scrollTop:0,keepScroll:true}

//...

router.beforeEach((to,from,next)={

//记录需要缓存页面的滚动条高度

if(from.meta.keepScroll){

const$content=document.querySelector("#app");

constscrollTop=$content$content.scrollTop:0;

from.meta.scrollTop=scrollTop;

next();

});

然后在回到当前页面时拿到临时缓存,并赋值

//utils/index.js

exportconstgetScroll=vm={

constscrollTop=vm.$route.meta.scrollTop;

const$content=document.querySelector('#app');

if(scrollTop$content){

$content.scrollTop=scrollTop;

组件内

import*asutilfrom'@/utils/';

//...

activeted(){

//保持滚动条

util.getScroll(this);

其二,利用keep-alive缓存整个页面。但是仅限于没有实时数据变动的页面

template

divid="app"

keep-alive

router-viewv-if="$route.meta.keepAlive"/router-view

/keep-alive

router-viewv-if="!$route.meta.keepAlive"/router-view

/div

/template

路由配置里在需要被缓存的页面meta里配置keepAlive属性

{

path:'/index',

name:'index',

meta:{

title:'',

keepAlive:true,//此组件需要被缓存

component:()=import('@/components/index'),

组件内在beforeRouteLeave钩子函数中,将该页面的keepAlive属性设为false

beforeRouteLeave(to,from,next){

from.meta.keepAlive=false;

next();

然后需要在下一个页面进行配置,页面返回时设置上一个页面的keepAlive为true

beforeRouteLeave(to,from,next){

if(to.path=="/index"){

to.meta.keepAlive=true;

}else{

to.meta.keepAlive=false;

next();

不滚动

其实有的页面我们会发现,体验下来觉得并不想让重新进入时回到上一次浏览的地方。

理论上说这里不加上面提到的各种方法不就行了?其实不然。

「重新进入」也分两种情况:重新打开这个页面,和刷新页面。

前者大可不必关心。对于后者,在比如QQ内置浏览器中,短时间内重新打开相同页面的逻辑和普通刷新是一样的。

在浏览器中,普通刷新会记住用户上次的位置似乎是个惯例了。如何在页面刷新时保持在顶部呢?

浏览器提供了historyAPI实现。其兼容性还算不错,除了IE外基本目前使用的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论