繁体   English   中英

滚动浮动/滑动侧栏问题

[英]Scrolling floating/sliding sidebar issue

我已经浏览了与我所面临的内容相关的所有内容,但仍无法解决。

我正在尝试做的是:

  1. 当用户向上/向下滚动页面时,获取侧边栏导航浮动。
  2. 使边栏居中停止,以便可以看到和单击所有元素。

我得到的是:

  1. 向下滚动(集中视图)时,边栏跟随滚动就很好,但是当向上滚动时,如果页面向上滚动得太快,则只显示一半的边栏。
  2. 向下滚动页面时,边栏将无尾地将页脚推向下方。
  3. 从底部一直向上滚动页面时,侧栏不会锁定回到其原始位置。 似乎有一点差距。

演示链接

这是脚本(改编自慷慨的乔登·米尔斯):

<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>

我建议使用另一种方法:

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

像这样:

$(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 {position:fixed; 最高:0; }

这使菜单更加可用。 如果要在某个点上阻止侧栏,则可以添加更多的逻辑(即,当底部太近时)。 这样,您无需设置数值(500、200等)。

但是,如果您不费吹灰之力就尝试使用带“缀”的引导程序(请看左侧菜单,这就是您想要的) http://twitter.github.com/bootstrap/javascript.html#affix

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM