文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JS如何实现页面滚动到关闭时的位置与不滚动效果

2023-06-30 18:11

关注

这篇文章主要讲解了“JS如何实现页面滚动到关闭时的位置与不滚动效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“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");    const scrollTop = $content ? $content.scrollTop : 0;    from.meta.scrollTop = scrollTop;  }  next();});

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

// utils/index.jsexport const getScroll = vm => {  const scrollTop = vm.$route.meta.scrollTop;  const $content = document.querySelector('#app');  if (scrollTop && $content) {    $content.scrollTop = scrollTop;  }};

组件内

import * as util from '@/utils/';//...activeted() {  // 保持滚动条  util.getScroll(this);}

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

<template>  <div id="app">    <keep-alive >        <router-view v-if="$route.meta.keepAlive"></router-view>    </keep-alive>    <router-view v-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外基本目前使用的浏览器都可以使用了。

if (history.scrollRestoration) {    history.scrollRestoration = 'manual';}

强制刷新(CTRL + F5)不会“记住”用户位置

感谢各位的阅读,以上就是“JS如何实现页面滚动到关闭时的位置与不滚动效果”的内容了,经过本文的学习后,相信大家对JS如何实现页面滚动到关闭时的位置与不滚动效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯