我正在使用On-Scroll Animate Header from codrops的修改版,并且菜单在顶部附近滚动时上下弹动时遇到问题。
这是我修改的代码:
var cbpAnimatedHeader = (function() {
var docElem = document.documentElement,
didScroll = false,
changeHeaderOn = 160;
function init() {
window.addEventListener( 'scroll', function( event ) {
if( !didScroll ) {
didScroll = true;
setTimeout( scrollPage, 250 );
}
}, false );
}
function scrollPage() {
var sy = scrollY();
if ( sy >= changeHeaderOn ) {
$('body > header').addClass('header--sticky');
} else {
$('body > header').removeClass('header--sticky');
}
didScroll = false;
}
function scrollY() {
return window.pageYOffset || docElem.scrollTop;
}
init();
})();
该代码通常可以正常工作,但是,当我从顶部滚动鼠标(单击默认页面加载)一次“单击”时,标题似乎处于混乱状态,并且在添加和删除该标题之间来回弹跳我上课。有谁对我需要进行哪些更改以使其正常工作有任何建议?
可以在www.linkup.co.nz/preview/上找到有效的演示
答案 0 :(得分:0)
问题在于页眉变得发粘,页眉不再包含在页面高度中并且不再向下滚动160个像素时。这是逐步出现的问题。
有三种解决方法:
changeHeaderOn = 160;
更改为changeHeaderOn = 200;
(仍然会处于“切换状态”,但不太可能发生。)
var cbpAnimatedHeader = (function() {
var docElem = document.documentElement,
didScroll = false,
changeHeaderOn = 160;
function init() {
window.addEventListener('scroll', function(event) {
if (!didScroll) {
didScroll = true;
setTimeout(scrollPage, 250);
}
}, false);
}
function scrollPage() {
var sy = scrollY(),
$header = $('body > header');
if (sy >= changeHeaderOn) {
// Add space where the header used to be
var $headerPlaceholder = $('<div class="js-header-placeholder">').height($header.outerHeight);
$header.before($headerPlaceholder)
// Now let the header become sticky
$header.addClass('header--sticky');
} else {
$header.removeClass('header--sticky');
$('.js-header-placeholder').remove();
}
didScroll = false;
}
function scrollY() {
return window.pageYOffset || docElem.scrollTop;
}
init();
})();
var cbpAnimatedHeader = (function() {
var docElem = document.documentElement,
didScroll = false,
changeHeaderOn = 160;
function init() {
window.addEventListener('scroll', function(event) {
if (!didScroll) {
didScroll = true;
setTimeout(scrollPage, 250);
}
}, false);
}
function scrollPage() {
var sy = scrollY(),
$header = $('body > header');
if (sy >= changeHeaderOn) {
// Add space where the header used to be
$('body').css('padding-top', $header.outerHeight);
// Now let the header become sticky
$header.addClass('header--sticky');
} else {
$header.removeClass('header--sticky');
$('body').css('padding-top', '');
}
didScroll = false;
}
function scrollY() {
return window.pageYOffset || docElem.scrollTop;
}
init();
})();