У меня на сайте очень странная ошибка. Функция .onscroll отлично работает на каждой странице, но не на отдельной публикации.
Это мой код:
jQuery(document).ready(function($) {
// Fixed header
window.onscroll = function() {fixedHeader()};
var header = document.getElementById("header");
var sticky = header.offsetTop;
function fixedHeader() {
if (window.pageYOffset > sticky) {
header.classList.add("sticky");
} else {
header.classList.remove("sticky");
}
}
});
Я проводил разные тесты в других браузерах, но, похоже, это не проблема.
Также не имеет значения, если я изменю эту строку кода:
window.onscroll = fixedHeader;
Есть у кого-нибудь идеи?
Спасибо за ответ, чаран, но проблема все еще не решена ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, из-за того, что id = "header" отсутствует на одной странице post.so, скрипт не обнаруживает идентификатор заголовка.
К сожалению, это не случай. Идентификатор также находится на отдельной странице.
Я не мог этого понять. Это может быть странная ошибка, поэтому я переписал весь код и функцию, и теперь все работает отлично. Для тех из вас, кто хочет увидеть мой новый код:
ultimateartist.stickyMenu = {
init: function() {
var stickyElement = $( '.stick-me' );
if ( $( stickyElement ).length ) {
stickyClass = 'make-sticky';
var stickyOffset = stickyElement.scrollTop();
// Our stand-in element for stickyElement while stickyElement is off on a scroll
if ( ! $( '#sticky-adjuster' ).length ) {
stickyElement.before( '<div id = "sticky-adjuster"></div>' );
}
// Stick it on resize, scroll and load
$( window ).on( 'resize scroll load', function(){
var stickyOffset = $( '#sticky-adjuster' ).offset().top;
ultimateartist.stickyMenu.stickIt( stickyElement, stickyClass, stickyOffset );
} );
ultimateartist.stickyMenu.stickIt( stickyElement, stickyClass, stickyOffset );
}
},
// Stick the search form
stickIt: function ( stickyElement, stickyClass, stickyOffset ) {
var winScroll = $( window ).scrollTop();
if ( stickyElement.css( 'display' ) != 'none' && winScroll > stickyOffset ) {
// If a sticky edge element exists and we've scrolled past it, hide the filter bar
if ( ! stickyElement.hasClass( stickyClass ) ) {
stickyElement.addClass( stickyClass );
$( '#sticky-adjuster' ).height( stickyElement.outerHeight() ).css( 'margin-bottom', parseInt( stickyElement.css( 'marginBottom' ) ) );
}
// If not, remove class and sticky-adjuster properties
} else {
ultimateartist.stickyMenu.unstickIt();
}
},
unstickIt: function() {
$( '.' + stickyClass ).removeClass( stickyClass );
$( '#sticky-adjuster' ).height( 0 ).css( 'margin-bottom', '0' );
}
возможно, вы написали какой-то скрипт, который противоречит функции прокрутки на одной странице, отлаживайте его, удаляя один за другим в коде