滚动浮动/滑动侧边栏问题

时间:2012-11-09 06:01:56

标签: javascript css

我已经查看了与我所面临的相关的所有内容,但仍无法解决问题。

我正在尝试做什么:

  1. 当用户向上/向下滚动页面时,让侧边栏导航浮动。
  2. 使侧边栏集中停止,以便可以看到并点击所有元素。
  3. 我得到了什么:

    1. 当向下滚动(集中视图)时,补充工具栏滚动得很好,但向上滚动时,当页面向上滚动太快时,只会显示一半侧边栏。
    2. 向下滚动页面时,侧边栏会将页脚向下推得更远。
    3. 当页面从底部向上滚动时,侧边栏不会锁定回其原始位置。似乎有一点差距。
    4. Demo Link

      这是剧本(由慷慨的Jordon Mears改编):

      <script type="text/javascript">
      function animate_box() {  
      var offset = -15; /* set this to the starting margin-top in the css */  
      var element = document.getElementById('animate_box'); 
      
      if(element) {  
          var top = Number(String(element.style.marginTop).substring(0,String(element.style.marginTop).indexOf('px')));
      
          try {  
              if(document.body.scrollTop > 500) {  
                  var difference = (document.body.scrollTop + offset);
              } else if(document.documentElement.scrollTop > 0) {  
                  var difference = (document.documentElement.scrollTop + offset);
      
              } else {  
                  var difference = offset;  
              }  
          } catch(e) {  
              var difference = offset;  
          }  
      
          difference = difference - top;  
      
          if(difference > 200) {  
              element.style.marginTop = (top + Math.abs(Math.ceil(difference / 30))) + 'px';  
          } else if(difference < 190) {  
              element.style.marginTop = (top - Math.abs(Math.ceil(difference / 30))) + 'px';  
          }  
      }  
      }  
      window.setInterval(animate_box, 50);
      </script>
      

1 个答案:

答案 0 :(得分:0)

我建议采用不同的方法:

  • 保存元素的起始位置(.offset()。top)
  • 滚动发生时
  • 如果窗口滚动偏移量(.scrollTop())大于起始位置,则使用“top:0”将侧边栏的位置更改为“fixed”
  • 如果它低于起始位置,则将其更改回静态(默认位置)。

这样的事情:

$(function() {
    var backup_position_toolbar = $('#sidebar').offset().top;
    $(window).scroll(function() {
        if ( $('#sidebar').offset().top - $(window).scrollTop() &lt; 0) $('#sidebar').addClass('fixed');
        if ( $(window).scrollTop() &lt; backup_position_toolbar ) $('#sidebar').removeClass('fixed');
    });
});

请注意,我使用的“固定”类定义如下:     .fixed {         位置:固定;         顶部:0;     }

这使菜单更有用。 如果你想在某一点阻止侧边栏,你可以添加一点逻辑(即当底部太近时)。 这样您就不需要设置数值(500,200等)。

但是如果你想要更多的东西没有努力尝试使用“affix”的bootstrap(看左边的菜单,是你想要的) http://twitter.github.com/bootstrap/javascript.html#affix