【发布时间】:2015-11-26 23:39:35
【问题描述】:
目标:
我希望我的固定标题元素在用户向下滚动时从屏幕上滑出(有效地隐藏),并在用户向上滚动时向下移动。
问题:
实际的动画和逻辑工作正常,但动画直到用户停止滚动才开始,而不是在滚动仍在正常进行时开始。
这在 Chrome 和 Firefox 上被复制。但是,使用完全相同的代码,该解决方案似乎可以在 JSFiddle 中正常工作:
https://jsfiddle.net/8cj7v6n5/
Javascript:
var lastScroll = 0;
var scrollDelta = 10;
var animating = false;
$(window).on('scroll', function() {
//if animation isn't currently taking place, begin animation
if (!animating) hasScrolled();
});
function hasScrolled() {
var st = $(window).scrollTop();
//if user hasn't scrolled past scrollDelta, do not animate yet
if(Math.abs(lastScroll - st) <= scrollDelta)
return;
animating = true;
if (st > lastScroll && st >= 0){ // Scroll Down
$('header').animate( { top: -80 }, { queue: false, duration: 500, complete: function() { animating = false; } });
}
else { // Scroll Up
$('header').animate( { top: 0 }, { queue: false, duration: 500, complete: function() { animating = false } });
}
lastScroll = st;
}
【问题讨论】:
-
为什么不用 CSS 而不是 javascript?
-
@JackAllan 我尝试在 CSS 中使用
transition属性,但没有成功。是这个意思吗? -
我的意思是,与其为标题设置动画,不如使用 CSS 将其粘贴到视口的顶部...当然假设那是您想要实现的目标
-
@JackAllan 使用 CSS 修复;那不是问题。对不起,如果我解释得不够好。我想在用户向下滚动时将其滑出屏幕,然后在用户向上滚动时将其滑回其原始位置。想想当您在移动浏览器上滚动时隐藏的地址栏。
标签: jquery css scroll jquery-animate