我看到如果用户滚动太快,则下面的jQuery函数不会触发。这是jQuery检测事件中的性能问题/错误还是我需要对我的代码执行某些操作?
...或者,是否有更好的方法[至少性能可靠性明智]用纯JavaScript调用它?如果是这样,我该如何编码呢?
$(window).scroll(function() {
var st = $(this).scrollTop();
if(st < 50){
$('.header_wrapper').css({'marginTop':-50});
} if(st < 40){
$('.header_wrapper').css({'marginTop':0});
}
});
您可以在此处看到它:http://www.walkingfish-grainboards.com/privacy-policy/
Thnx的帮助 - 非常感谢。
答案 0 :(得分:1)
因为你正在考虑表现:
$(window).on('scroll',function(){
var st = $(this).scrollTop(),
mTop = ((st < 40) ? 0 : -50);
$('.header-wrapper').css({marginTop:mTop});
});
不是将赋值放在if
中,而是可以放置值,而是根据值进行一次赋值。使用当前语句,无论你走多远,你都会保留-50px
值(因为你永远不会清除这个值),并且只有当你滚动到顶部时才会返回0。因此,您不需要使用嵌套的if
语句。
如果你真的想提高一个档次,请加入缓存:
var scrollStuff = {
headerWrapper:$('.header-wrapper'),
onScroll:function(){
var self = this,
st = $(self).scrollTop(),
mTop = ((st < 40) ? 0 : -50);
self.headerWrapper.css({marginTop:mTop});
}
};
$(window).on('scroll',function(){
scrollStuff.onScroll();
});
通过缓存包括函数在内的所有内容,您无需每次为要应用marginTop
的元素重新查询DOM。
答案 1 :(得分:0)
好吧,我最初想过它。这非常有效:
$(window).scroll(function(){
yos = (window.pageYOffset > 48);
$('.headerwrap').toggleClass('stick', yos);
$('.pagetitlewrap').toggleClass('headerwrap_stuck', yos);
});