javascript - 实现滚动锚定时元素“轻微抽搐”
问题描述
编辑:令人尴尬的是,我最初在 Chrome 上看到了这个问题,但问题是因为我在浏览器上稍微缩小了导致亚像素元素大小。如果元素是全像素高度,则可以正常工作。然而,我相信这仍然是一个问题,因为 Firefox 似乎以不同于 Chrome 的方式呈现亚像素元素,而且我们应该支持缩放。
我正在尝试实现滚动锚定跨浏览器,以便在将新元素附加到溢出容器并且用户向上滚动时,位置不会移动。
我在这里有一个测试代码笔: https ://codepen.io/djdmorrison/pen/YzpwvWx
我将容器限制为包含 50 个元素,每 250 毫秒添加一个新元素,同时删除最旧的元素。当用户在容器中滚动时,我希望元素保持静止。
我通过在添加新元素之前获取container.scrollTop
and来做到这一点。container.scrollHeight
然后我添加元素,container.scrollHeight
再次获取并计算 scrollHeight 的差异(计算添加的新元素和删除的旧元素的高度差异)。然后我将其设置container.scrollTop
为前一个scrollTop
减去新元素高度(+边距)加上+滚动高度的差异:container.scrollTop = beforeScrollTop - (newEl.offsetHeight + margin) + diffScrollHeight;
这似乎几乎是解决方案,但有一个非常轻微的抽搐,尤其是在 Firefox 上。
我错过了什么?
解决方案
推荐阅读
- html - 尝试减少表格中的垂直空间量时出现问题:垂直对齐不起作用?
- openssl - 使用 openssl 为 localhost 创建证书时系统找不到文件指定错误
- c# - C# 选择要显示的随机字符串
- c# - 具有两个通用方法输入参数的表达式函数
- debugging - 找不到与 0451:f432 匹配的设备
- angular - 离子构建后无法加载 i18N 文件
- redis - 无法连接到 Redis 企业云 (gcloud)
- php - 如何将 Laravel 7 错误 json 转换为这个新的 json
- laravel - 急切负载存在()布尔查询
- python - 将日期时间字符串转换为日期时间对象