Вы должны получить позиционирование вашего элемента в событии прокрутки, а не на интервале.Нет гарантии, что интервал получит текущее позиционирование элемента при срабатывании события прокрутки, что означает неправильное позиционирование элемента.
Линия
if (window.pageYOffset >= this.stickyTabsOffset)
должна быть
if (window.pageYOffset > this.stickyTabsOffset)
Поскольку, если вы исправляете вкладки, их смещение становится равным 0, и если вы затем прокручиваете до верхней части страницы, pageYOffset также становится равным нулю, что означает, что else
никогда не может срабатывать для сброса позиционирования вашего элемента.
Я взял ваш код и поместил его в несколько простых, ванильных JS и HTML.
<body>
<div style="position: static; top:30px; height: 300px; width: 300px; background-color:green"></div>
<div id="test" style="position: static; top:0px; height: 300px; width: 300px; background-color:red"></div>
<div style="position: static; top:30px; height: 300px; width: 300px; background-color:purple"></div>
<div style="position: static; top:30px; height: 300px; width: 300px; background-color:yellow"></div>
<div style="position: static; top:30px; height: 300px; width: 300px; background-color:gray"></div>
<div style="position: static; top:30px; height: 300px; width: 300px; background-color:blue"></div>
</body>
А вот и JS.Я скопировал как можно больше вашего кода.
<script>
window.onscroll = function() {
if ( window.pageYOffset > document.getElementById("test").offsetTop ) {
document.getElementById("test").style.position = "fixed";
} else {
document.getElementById("test").style.position = "static";
}
}
</script>
Вы не должны исправлять два элемента.Оберните оба элемента в один элемент, затем закрепите этот элемент.Также - вы можете позаботиться об этом в другом месте, но я упоминаю это для назидания любого, кто проходит мимо - когда вы вырываете элемент из потока документов с помощью position:fixed
, его предыдущее пространство больше не используется, то естьчто содержимое страницы будет испытывать резкое переворачивание.Поместите исправляемый элемент в родительский элемент с установленной высотой, которая не станет фиксированной.Это не позволяет странице переформатироваться.
Опять же, я не уверен, что вы делаете это где-то еще, но я думаю, что стоит упомянуть, что прямой доступ к документу - плохая практика.Вместо этого вы должны ввести токен Angular DOCUMENT .