2014-02-27 50 views
2

我看到,如果用户滚动太快,下面的jQuery函数不火。这是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

看起来好像没什么问题 – wizulus

+1

这个功能是相当低效为它做什么。 – PlantTheIdea

+0

@PlantTheIdea你可以展开你的理由为什么PLZ ..? – CelticParser

回答

0

嗯,我在想它最初。这个伟大的工程:

$(window).scroll(function(){ 
yos = (window.pageYOffset > 48); 
    $('.headerwrap').toggleClass('stick', yos); 
$('.pagetitlewrap').toggleClass('headerwrap_stuck', yos); 
}); 
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(); 
}); 

通过缓存的一切,包括功能,你不需要每次都重新查询DOM对你所申请的marginTop元素至。