位置:粘性 - 与 javascript 高度调整结合使用时滚动弹跳

2023-12-19

玩完之后position: sticky有一段时间,我开始实现粘性导航,并遇到了这个有趣但令人沮丧的滚动弹跳问题。

这是许多网站上常见的导航行为类型,传统上您会使用 JavaScript 来计算页面中相对元素的偏移量。当元素到达窗口顶部时,将添加一个“卡住”类,将元素从文档流中取出position: fixed,并且会在其位置添加一个相同高度的虚拟元素,以防止页面“跳转”。此外,通常会看到 JavaScript 缩小导航的高度以在滚动时节省空间。

CSS 现在似乎可以解决这一切position: sticky,除了(据我所知),检测元素何时“卡住”。相反,我使用了一些 javascript 来进行卡住检测,发现一切都运行良好,直到粘性元素的高度需要改变.

这很难解释,但它对生产造成了严重破坏 - 所以这是我为了尽可能简单地说明问题而制作的一个精简示例。

CSS粘性位置高度调整bug https://codepen.io/bluefantail/pen/zzKNpR

当页面的高度恰到好处时,效果最好,因此我在元素上设置了固定的高度,以确保每个人都能看到相同的内容。您可以添加更多内容,但滚动过去时仍然是一个问题。

结果是一些非常奇怪的行为。向下滚动时,导航会粘住,并且当它缩小导航栏时,浏览器会自动创建“虚拟元素”position: sticky似乎是保持同步用它。这意味着,当添加卡住类时,整个页面会变小,几分之一秒后,导航不再卡住,从而导致出现故障的振动循环。

我测试过的每个浏览器的行为也完全不同。在 Chrome 中,这种弹跳永远无法解决,它停留在无限循环中,不断添加/删除卡住的类。更有趣的是,在 Safari 中,滚动位置被“推回”到不会出错的状态。然后在 Firefox 中,它会执行这两项操作,出现一两秒钟的故障,然后再次强制滚动位置返回。

我想知道是否有人经历过这种情况,并提出任何解决方案?我想出的任何 js 解决方法都没有真正起作用或非常好!当然,随着人气的增长,越来越多的人会选择这个......

欢迎天才的解决方法、技巧、见解或完美的解决方案!


尝试添加overflow-anchor: none;当应用会改变其大小(并可能影响窗口大小/元素定位)的更改时,到粘性元素。

更新:最终,我想到的正确解决方案是:有一个永远不会改变大小的外部元素(在任何给定的断点处它始终具有相同的完整高度)。那个是粘性的。但它也不应该有背景/视觉样式,并且它的有效高度应该由高度 + 下边距定义(以便它在文档中占据适量的初始空间,但实际上不会阻止视觉导航后的点击)缩小并提供更多空间。

然后有一个可以改变尺寸的内部元素,无论是在现实中还是在视觉上。

您还可以使用现代属性,例如 contains:layout size;在内部元素上,例如

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

位置:粘性 - 与 javascript 高度调整结合使用时滚动弹跳 的相关文章

  • 按百分比设置 bootstrap 模态身高

    我正在尝试制作一个带有主体的模态 当内容变得太大时 该主体会滚动 但是 我希望模式能够响应屏幕尺寸 当我将最大高度设置为 40 时 它没有任何效果 但是 如果我将最大高度设置为 400px 它会按预期工作 但不会响应 我确信我只是错过了一些
  • 仅一页 JavaScript 应用程序

    您是否尝试过单页 Web 应用程序 即浏览器仅从服务器 获取 一页 其余部分由客户端 JavaScript 代码处理 此类 应用程序页面 的一个很好的例子是 Gmail 对于更简单的应用程序 例如博客和 CMS 使用这种方法有哪些优点和缺点
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • Google Chrome 106 可拖动导致元素消失

    使用拖放元素时 绝对定位元素中包含的大多数其他元素都会从屏幕上消失 如果我调整窗口大小 这些元素会出现 但在开始拖动时会再次消失 我在最新版本的 Google Chrome 106 和 Beta 版本 107 0 5304 18 以及现在的
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • 如何将送货地址复制到帐单地址

    我想知道是否可以将送货地址复制到帐单地址 当用户单击与送货地址相同的复选框时 送货地址值将被复制到账单输入字段 我完成了大部分部分 但我不确定如何将选择菜单 状态 值复制到帐单地址 我真的很感谢任何帮助 My code document r
  • 单击关闭按钮后不显示 Google 一键登录 UI

    我正在尝试按照本指南使新的谷歌一键登录工作 https developers google com identity one tap web https developers google com identity one tap web
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 如果数字小于 10,则显示前导零 [重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 相当于 printf string format https stackoverflow com questions 610406 javascript equivalent t
  • JavaScript onresize 事件多次触发

    我在尝试仅在触发 onresize 事件时运行一次函数时遇到一些麻烦 我已经看过这个问题DOM onresize 事件 https stackoverflow com questions 1500312 javascript onresiz
  • 使用异步调用时如何从 javascript 更新元刷新?

    我有一个系统 它使用元刷新来注销页面 该系统会在空闲用户后进行清理 不用担心 服务器也会导致会话超时 我开始通过 ajax 进行一些操作 不是真正的 xml 但这不是重点 我可以运行从异步请求返回的javascript 所以我想知道是否可以
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012
  • HTML 默认图像大小

    我在我的代码上显示 3 张图片 图片具有不同的尺寸 宽度和高度 div class row div class col lg 12 h2 class page header Gallery h2 div div class col md 4
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • 使用 Amazon SES 的 Codeigniter SMTP 电子邮件

    我想昨天亚马逊宣布了对 SES 简单电子邮件服务 的 SMTP 支持 我尝试使用 Codeigniter 发送 SMTP 电子邮件 但没有成功 我有一个经过验证的发件人 一切看起来都很好 this gt load gt library em
  • 查找从开始日期到年底的每个星期五

    所以我又带着另一个令人困惑的日期时间问题回来了 在 C 中 我如何返回从开始日期 DateTime Now 到今年年底 例如 今天是 19 号星期五 它将返回 26 2 9 16 23 30 7 等 这有效吗 static IEnumera
  • 如何用 Dotrine 保存图像

    我想在我的文章实体中保留图像 Doctrine2 可以做到这一点吗 我该怎么做呢 此致 博多 使用带有 File 类型的 ODM 设置非常简单 对于 ORM 实体 我会考虑创建一个像这样的列 注意 使用此链接将 blob 类型添加到 Doc
  • 使用 multipart/form-data 和 JSON 进行 Curl 发布

    有没有办法使用curl来做multipart form data发布并指定数据是application json 它不一定是卷曲的 这就是我使用的 效果很好 curl v H Content Type multipart form data
  • 使用纱线工作区在 npm 上创建可用的库...

    我正在寻找有关我编码的模式的反馈一边修修补补 Context 我正在为我的公司创建一个包 该包将公开发布 DX 开发人员体验 对我们来说是最重要的 为此我选择了开发中的最新趋势 Typescript esm 等 我想提出多个模块并使导入易于
  • 无向图中,最简单的环必须有3个节点?

    我正在尝试写一个关于循环和无向图的证明 但我对某些事情感到困惑 如果我的图只有 2 个顶点和一条连接它们的边 那不是循环 不是吗 因此 我需要至少 3 个顶点 其中 2 个顶点与其中一个节点之间有 2 个连接 另外两个顶点之间有一个连接 以
  • Java程序使用javascript读取html页面并保存其内容

    我想使用javascript提取html内容 从网站中提取用户的评论 在chrome中另存为 Inspect Element 我试试这个 Java 程序读取 html 页面并将其 HTML 代码保存在文本文件中 https stackove
  • 这是 C# 中将分隔字符串转换为 int 数组的最佳方法吗?

    给出以下字符串 string str 1 2 3 这是否是将其转换为最佳扩展int array static class StringExtensions public static int ToIntArray this string s
  • 使用python查找CSV文件每列的最小值

    我创建了一个程序 可以查找 CSV 文件每一行的最小值 现在我想对每一列执行相同的操作 但我无法这样做 任何建议将不胜感激 谢谢 Import and convert csv import csv data with open file r
  • Java HashMap 中的冲突解决

    Java HashMap uses put插入K V对的方法HashMap 可以说我用过put方法和现在HashMap
  • 在cloudfoundry上发布项目时出现错误java.io.FileNotFoundException(log4j日志文件)

    我计划将 Web 应用程序与 mysql 服务一起迁移到 Cloud Foundry 但我遇到了以下错误 它与当地环境配合良好 日志文件也会生成 下面是错误日志 Jan 5 2013 7 35 59 AM org cloudfoundry
  • X-Forwarded-Proto 和 Flask

    我有完全相同的问题描述这个问题和答案 https stackoverflow com questions 19840051 mutating request base url in flask 这个问题的答案是一个很好的解决方法 但我不明白
  • 用c++做一个定时器?

    我正在用 C 开发一个简单的游戏 一种追逐点风格的游戏 你必须单击显示屏上的一个绘制的圆圈 然后每次单击都会跳到另一个随机位置 但我想让游戏在 60 后结束几秒钟左右 将分数写入文本文件 然后在启动程序时从文本文件中读取信息并将信息存储到数
  • 使用默认分隔符与用户定义分隔符分割字符串

    我尝试了一个使用字符串分割的简单示例 但出现了一些意外的行为 这是示例代码 def split string source splitlist for delim in splitlist source source replace del
  • 防止渐变叠加滚动

    我试图在滚动 div 的底部放置一个小渐变 我的解决方案基于已接受的答案这个所以线程 https stackoverflow com questions 9204450 how to apply a fade away effect not
  • Facebook Messenger API“无法验证 URL”

    我正在尝试设置 Facebook Messenger API 但在尝试添加 WebHook 时收到此错误 无法验证该 URL 回调验证失败 出现以下错误 curl errno 60 curl error SSL证书问题 无法获取本地颁发者证
  • init] 自动引用计数

    我知道我应该使用 ObjectClass tmpObject ObjectClass alloc init realObject tmpObject tmpObject release 初始化realObject where realObj
  • 如何遍历NLTK树对象?

    给定一个括号内的解析 我可以将其转换为 NLTK 中的 Tree 对象 如下所示 gt gt gt from nltk tree import Tree gt gt gt s ROOT S NP NNP Europe VP VBZ is P
  • JSF2 静态资源管理——组合、压缩

    有谁知道动态组合 缩小所有 h outputStylesheet 资源 然后在渲染阶段组合 缩小所有 h outputScript 资源的方法 混合 缩小的资源可能需要使用基于组合资源字符串或其他内容的键进行缓存 以避免过度处理 如果这个功
  • 位置:粘性 - 与 javascript 高度调整结合使用时滚动弹跳

    玩完之后position sticky有一段时间 我开始实现粘性导航 并遇到了这个有趣但令人沮丧的滚动弹跳问题 这是许多网站上常见的导航行为类型 传统上您会使用 JavaScript 来计算页面中相对元素的偏移量 当元素到达窗口顶部时 将添