2013-04-17 92 views
0

当用户向下滚动一定数量的像素的,我修复报头。但是,在用户满足逻辑之后,是否有办法停止调用窗口滚动功能?我认为这不利于表现。见我的控制台的屏幕截图(http://d.pr/i/OHDXjQuery的窗口滚动停止击发作为用户滚动

$window.scroll(function() { 
    if ($window.scrollTop() > 100) { 
     $('.header').addClass('fixed'); 
     console.log('fix header'); 
    } 
    else { 
     $('.header').removeClass('fixed'); 
     console.log('unfix header'); 
    } 

} 
+0

你可以使用一个布尔值来贬低操作的成本,像 “如果(!alreadFixed && $ window.scrollTop()> 100)”[800像素后Scrolldown已显示DIV(的 – cernunnos

+0

可能重复HTTP ://stackoverflow.com/questions/15798360/show-div-on-scrolldown-after-800px) –

+0

@cernunnos这将固定,使其不能要松开后(滚动备份到顶部后,突破后的功能),因为JS会停止计算scrollTop。 – Leng

回答

3

你必须继续检查滚动位置。我假设你想在用户滚动回100时解除它?

您目前的实现是好的,性能明智的。有一两件事你可以添加一个检查,看看是不是已经添加了类,或者保持一个切换,所以你知道如果类是存在的(而不是检查)。

$window.scroll((function() { 
    var fixed = false, elem; 
    return function() { 
     var should_fix = $window.scrollTop() > 100; 
     elem = elem || $('.header'); 
     if (should_fix !== fixed) { 
      if (should_fix) { 
       elem.addClass('fixed'); 
       console.log('fix header'); 
      } else { 
       elem.removeClass('fixed'); 
       console.log('unfix header'); 
      } 
      fixed = should_fix; 
     } 
    }; 
}()) // immediate invocation, because it's awesome 
+1

从技术上讲,$('。header')'可以缓存在处理程序之外,以提高性能并减少DOM交互。但是,只有它是一个静态元素,并且不会动态添加/删除。 – Ian