如果向下滚动屏幕,请将div粘贴到屏幕顶部

我有一个div,当我的网页第一次加载时,从顶部大约100px(它拥有一些button等页面)。

当用户滚动过去时,我想让div“跟随”用户,因为它附着在屏幕的顶部。 当用户返回到页面顶部时,我希望它回到原来的位置。

Visualization - xxxxx is the div: Default (page load) User vertically scrolled well past it --------- --------- | | |xxxxxxx| < after div reaches top of screen when |xxxxxxx| | | page is scrolled vertically, it stays | | | | there --------- --------- 

诀窍是你必须将它设置为position:fixed,但是只有在用户滚动过去之后。

这是做这样的事情,附加一个处理程序的window.scroll事件

  // Cache selectors outside callback for performance. var $window = $(window), $stickyEl = $('#the-sticky-div'), elTop = $stickyEl.offset().top; $window.scroll(function() { $stickyEl.toggleClass('sticky', $window.scrollTop() > elTop); }); 

这只是简单地添加了一个sticky CSS类,当页面滚动过去,并在备份时删除类。

而CSS类看起来像这样

  #the-sticky-div.sticky { position: fixed; top: 0; } 

编辑 – 修改代码来cachingjQuery对象,现在更快。

使无限的答案没有闪烁工作的诀窍是把滚动检查另一个div,然后你想要修复。

源代码viixii.com使用我结束了使用这个:

 function sticky_relocate() { var window_top = $(window).scrollTop(); var div_top = $('#sticky-anchor').offset().top; if (window_top > div_top) $('#sticky-element').addClass('sticky'); else $('#sticky-element').removeClass('sticky'); } $(function() { $(window).scroll(sticky_relocate); sticky_relocate(); }); 

这样,只有到达sticky-anchor时才调用该函数,因此不会在每个滚动事件中删除和添加“.sticky”类。

现在,粘滞的锚到达顶部时,它增加粘性类,一旦粘性锚返回到视图中,它将被移除。

只需将一个空的div与类似于您想要修复的元素上方的锚点的类相关联即可。

像这样:

 <div id="sticky-anchor"></div> <div id="sticky-element">Your sticky content</div> 

代码的所有功劳归于viixii.com

你应该尝试jQuery插件的航点。

http://imakewebthings.com/waypoints/shortcuts/sticky-elements/

我认为它确实是你想要的,没有闪烁。 不过从内存来看,我觉得在Mobile Safari(YMMV)中效果不好。

纽约时报最近就是一个很好的例子:

http://www.nytimes.com/interactive/2010/11/13/weekinreview/deficits-graphic.html

页面中的框图不会从页面的顶部滚动。

以前有一个问题 (没有答案)给出了这个function的一个很好的例子 。 你可以检查相关的源代码的细节 (search“工具栏”),但基本上他们使用webdestroya的解决scheme和一些JavaScript的组合:

  1. 页面加载和元素的位置是:static
  2. 在滚动时,位置被测量,如果元素位置:静态,并且它离开页面,则元素被翻转到位置:固定。

虽然我build议检查前面提到的源代码,因为它们确实处理了一些你可能不会马上想到的“陷阱”,比如在点击链接时调整滚动位置。

我为此创build了一个jQuery插件。 希望得到一些反馈,因为这是我的第一个。 https://github.com/dubroe/sticky-div

使用position:fixed; 并设置top:0;left:0;right:0;height:100px; 你应该能够“坚持”到页面的顶部。

 <div style="position:fixed;top:0;left:0;right:0;height:100px;">Some buttons</div>