如果正文的.scroll()
高于特定值,我确实有一个简单的.scrollTop()
函数来触发事件:
$(window).scroll(function() {
if($('body, html').scrollTop() > 250) {
console.log("higher");
$('#navbar').animate({paddingTop: 5, paddingBottom: 5}, 'slow');
} else {
console.log("lower");
$('#navbar').animate({paddingTop: 25, paddingBottom: 25}, 'slow');
}
});
问题是,它为每个滚动像素触发函数。我只想根据scrollTop
值激发动画。
我怎样才能以最佳方式解决这个问题?
由于
答案 0 :(得分:1)
试试这个
var _top, _last_top = -1;
$(window).scroll(function() {
_top = $('body, html').scrollTop();
if(_top > 250 && _last_top < 250) {
_last_top = _top;
$('#navbar').animate({paddingTop: 5, paddingBottom: 5}, 'slow');
}
if(_top < 250 && _last_top > 250) {
_last_top = _top;
$('#navbar').animate({paddingTop: 25, paddingBottom: 25}, 'slow');
}
});
答案 1 :(得分:0)
这是因为您在函数中从scrollTop
和body
获得了html
个值。根据浏览器的不同,这会给您带来一些不可预知的结果。您应该获得scrollTop
的{{1}}值。
body
修改:明显获得$(window).scroll(function() {
console.log($('body').scrollTop());
if($('body').scrollTop() > 250) {
console.log("higher");
$('#navbar').animate({paddingTop: 5, paddingBottom: 5}, 'slow');
} else {
console.log("lower");
$('#navbar').animate({paddingTop: 25, paddingBottom: 25}, 'slow');
}
});
scrollTop
值可以解决跨浏览器的问题。适合我在FF和Chrome中使用:
window
答案 2 :(得分:0)
使用阻止变量,这应该有效。
var animateOnce = false;
$(window).scroll(function() {
if($('body, html').scrollTop() > 250) {
if(animateOnce == false) {
$('#navbar').animate({paddingTop: 5, paddingBottom: 5}, 'slow');
}
animateOnce = true;
} else {
if(animateOnce == true) {
$('#navbar').animate({paddingTop: 25, paddingBottom: 25}, 'slow');
}
animateOnce = false;
}
});