javascript - 移动 Safari 上的粘性元素问题
问题描述
我有一个元素,我希望在向下滚动时贴在页面顶部。多亏了 SO 上的另一个用户,所有代码在功能上都能正常工作。然而,当在手机上向下滚动时,粘性元素似乎落后了一点。我的意思是代码似乎每次父元素滚动时都会调用,它会导致对粘性元素进行数百或数千次调整,因此会导致它有点晃动。
下面是代码:
HTML
<div id="scroller-wrapper">
<div id="scroller-anchor"></div>
<div id="scroller" class="row visible-xs-block meal-controls">
My sticky element is here and working
</div>
</div>
JS
$('#scroller-wrapper').scroll(function() {
var $anchor = $("#scroller-anchor");
var $scroller = $('#scroller');
var move = function() {
var st = $(window).scrollTop();
var ot = $anchor.offset().top;
if(st > ot) {
$scroller.addClass('fixedElement');
} else {
$scroller.removeClass('fixedElement');
}
};
$(window).scroll(move);
move();
});
CSS
.fixedElement {
position:fixed;
top:0;
right:0;
width:100%;
z-index:10000;
}
解决方案
IMO,一个可能且更有效的解决方案是position: sticky
在 CSS 而不是 JS 中使用。你也需要提供top: 0
。在 IE 中有些兼容性是滞后的,但它已经是一个可行的解决方案。值得在这里看看
如果您担心旧浏览器,您可以在 JS 中添加一个回退功能,这仍然有些滞后
推荐阅读
- azure - 访问链接表 - 登录而不保存密码
- bash - bash -ex 输出中 + '[' ']' 的含义
- xaml - 如何设计一个简单的图形?
- android - AppCompactActivity中的setSupportActionBar无法应用android
- python - Python Spark 本地并行性
- javascript - 更多列上的 Where 子句
- c# - DbContext.Set
().SqlQuery 和 DbContext.Database.SqlQuery 返回不同的结果 - php - PHPflock():我可以在文件获取和文件放置内容周围使用它吗(读取-修改-写入)
- mysql - EC2 上托管的 mySQL 的服务器名称是什么?
- wiremock - WireMock 不按正文映射请求包含