首页 > 其他分享 >再次学习History.scrollRestoration

再次学习History.scrollRestoration

时间:2024-05-28 14:43:50浏览次数:23  
标签:学习 popState 位置 scrollRestoration 滚动条 History scroll 页面

2024-05-23-23-52-40

之前在react.dev的源代码中了解到了这个HIstory的属性,当时写了一篇笔记来记录我对它的理解,现在看来还是一知半解。所以今天打算重新学习一下这个属性,主要从属性以及所属对象的介绍、使用方法,是否开启标准这几个方面来简单展开。

什么是scrollRestoration

scrollRestoration是一个属性,它所属的实例是浏览器的History。

这个属性是做什么的?它用来控制我们在切换历史页面的时候,滚动条的位置会不会恢复到之前的位置。

屏幕录制2024-05-23 10.48.05

如图所示,我们切换历史页面,又切换回最之前的页面,发现滚动条的位置依然保持底部,也就是之前的位置。

什么是切换历史页面,从操作上来讲就是点击浏览器的回退(有的浏览器长按回退键会弹出历史的前面多个页面供选择)、前进按钮

从代码上来讲就是执行下面的这些操作:

history.back()
history.forward()
history.go(page) // page大于0,表示往后面翻对应的页数,反之则是往前翻对应的页数

那么scrollRestoration这个属性与是否恢复滚动条的关系是什么?

scrollRestoration可选的值为auto和manual (如果浏览器支持这个属性,那么它默认是auto)

scroll restoration mode, a scroll restoration mode, initially "auto". HTML Standard

如果是auto:那么在切换历史页面的时候,滚动条会自动地恢复到切换之前的位置。

如果是manual:那么在切换页面的时候,滚动条会在顶部。

(上述的结果均在未手动修改state对应的滚动条位置的情况下)

属性的局限性

我之前觉得这个特性很好,但是为什么要单独地设置一个属性来控制是否要恢复到之前的滚动条位置呢?

History API - 滚动恢复  |  Blog  |  Chrome for Developers这篇文章中提到:

This often means unsightly jumps as the scroll position changes automatically, and especially so if your app does transitions, or changes the contents of the page in any way. Ultimately this leads to an horrible user experience.
To make matters even worse there's very little you can do about it: Chrome triggers a popState event before the scroll event, which means you can read the current scroll position in popState and then reverse it in the scroll event handler with window.scrollTo (Ewww, but at least it works!). Firefox, however, triggers the scroll event before popState, so you have no idea what the old scroll value was in order to restore it. Bah!

翻译为中文:

这通常意味着当滚动位置自动改变时会出现难看的跳动,尤其是当你的应用程序进行过渡或以任何方式更改页面内容时。这最终会导致糟糕的用户体验。
更糟的是,你几乎无能为力:Chrome 会在 scroll 事件之前触发 popState 事件,这意味着你可以在 popState 中读取当前的滚动位置,然后在 scroll 事件处理程序中使用 window.scrollTo 恢复滚动位置(呃,但至少它能工作!)。然而,Firefox 则是在 popState 事件之前触发 scroll 事件,所以你无法知道旧的滚动位置以便恢复它。唉!

总结一下就是,此文的作者认为这个属性会造成的两个缺点是:

  1. 可能产生不太美观的跳跃:当滚动位置自动改变时,页面内容可能会突然跳动,尤其是在应用程序进行过渡或更改页面内容时,这会导致不好的用户体验。
  2. (在不开启这个属性的时候)非常难以人工地实现恢复滚动位置:由于不同浏览器在触发 popState 和 scroll 事件的顺序上存在差异(如 Chrome 和 Firefox),这使得在所有浏览器中一致地恢复滚动位置变得非常困难。

那么什么时候需要设置为manual?

参考上面的两个缺点来说,当满足以下的条件的时候,可以考虑设置为manual

  1. 页面确实会产生了不太美观的跳跃
  2. 不在意历史的滚动条位置,同时更希望全部由手动控制滚动条位置的时候

参考的资料

History: scrollRestoration property - Web APIs | MDN

HTML Standard

标签:学习,popState,位置,scrollRestoration,滚动条,History,scroll,页面
From: https://www.cnblogs.com/KazooTTT/p/18217995/understanding-history-scrollrestoration

相关文章

  • 学习JavaScrip 中常见的6种数组方法
    学习JavaScrip中常见的6种数组方法1.find()方法2.forEach()方法3.join()方法4.map()方法5.reduce()方法6.filter()方法1.find()方法find()方法取得数组中第一个满足回调函数中指定条件的元素。如果没有元素满足条件,这个方法返回undefined。下面的例子能够帮助你......
  • 【动手学PaddleX】谁都能学会的基于迁移学习的老人摔倒目标检测
    本项目使用PaddleX搭建目标检测模块,在一个精选的数据集上进行初步训练,并在另一个老年人跌倒检测的数据集上进行参数微调,实现了迁移学习的目标检测项目。1.项目介绍迁移学习是非常有用的方法,在实际生活中由于场景多样,环境复杂,一些场景复杂或者人体姿态不一的数据集较少,因此直......
  • 机器学习的作用
    机器学习的作用广泛而深远,其应用已经渗透到各个领域,为人们的生活和工作带来了极大的便利。以下是机器学习作用的详细说明:一、自动化处理机器学习能够自动处理大量数据和任务,极大地减少了人工处理的工作量。通过学习和分析数据,机器可以自动完成分类、聚类、回归等任务,实现数据......
  • 某CC攻击脚本级教程_仅供学习参考禁止非法用途
    教程简介:某CC攻击脚本级教程_仅供学习参考禁止非法用途相关图片:教程地址:某CC攻击脚本级教程_仅供学习参考禁止非法用途-彩豆博客(521cd.cn)https://www.521cd.cn/4606.html......
  • Linux 学习笔记
    1.快速检测端口连通性/dev/tcp/<Hostname>(静态IP地址)/<port>(端口号)    特殊的文件,允许通过该接口进行TCP网络通信例 :测试192.168.1.1的22端口是否打开,/dev/tcp/192.168.1.1/22 没有输出结果代表端口是通的,如果有结果输出代表端口是不通的并未打开利用Bash脚......
  • 2024-05-28 英语学习纪要
    Recentyear,moreandmorechineseculturalproductshavecomeintoglobalmarketandgetincreasinglyfacinatedbycustomersabroad.WiththerapiddevelopmentofofChineseculturaltrade(对外文化贸易,真的不会翻译……),theamountofexportedChinesecultura......
  • 2024-05-28 英语学习纪要
    Recentyear,moreandmorechineseculturalproductshavecomeintoglobalmarketandgetincreasinglyfacinatedbycustomersabroad.WiththerapiddevelopmentofofChineseculturaltrade(对外文化贸易,真的不会翻译……),theamountofexportedChinesecultura......
  • 西门子学习笔记3 - 工业物联网(MQTT协议服务器的搭建)
    这里使用的是公开测试的一个服务器(EMQX)的服务器EMQX是一款全球下载量超千万的开源物联网MQTT服务器,单集群支持1亿物联网设备连接,消息分发时延低于1毫秒,助力企业构建关键业务的IoT平台与应用。1、服务器文件的下载1、官方下载地址:免费下载、试用EMQ产品(emqx.com......
  • LLM 大模型学习必知必会系列(六):量化技术解析、QLoRA技术、量化库介绍使用(AutoGPTQ、A
    LLM大模型学习必知必会系列(六):量化技术解析、QLoRA技术、量化库介绍使用(AutoGPTQ、AutoAWQ)模型的推理过程是一个复杂函数的计算过程,这个计算一般以矩阵乘法为主,也就是涉及到了并行计算。一般来说,单核CPU可以进行的计算种类更多,速度更快,但一般都是单条计算;而显卡能进行的都是基......
  • LLM 大模型学习必知必会系列(七):掌握分布式训练与LoRA/LISA微调:打造高性能大模型的秘
    LLM大模型学习必知必会系列(七):掌握分布式训练与LoRA/LISA微调:打造高性能大模型的秘诀进阶实战指南1.微调(SupervisedFinetuning)指令微调阶段使用了已标注数据。这个阶段训练的数据集数量不会像预训练阶段那么大,最多可以达到几千万条,最少可以达到几百条到几千条。指令微调可以......