div位置固定在滚动上,在页面顶部开始

时间:2014-02-17 13:45:22

标签: jquery css html scroll

当“侧边栏”到达“固定标题”而非页面顶部时,如何将其“固定”固定位置?

jsfiddle

$(function() {
    var top = $('#sidebar').offset().top - parseFloat($('#sidebar').css('marginTop').replace(/auto/, 0));
    var footTop = $('#footer').offset().top - parseFloat($('#footer').css('marginTop').replace(/auto/, 0));

    var maxY = footTop - $('#sidebar').outerHeight();

    $(window).scroll(function(evt) {
        var y = $(this).scrollTop();
        if (y > top) {
            if (y < maxY) {
                $('#sidebar').addClass('fixed').removeAttr('style');
            } else {
                $('#sidebar').removeClass('fixed').css({
                    position: 'absolute',
                    top: (maxY - top) + 'px'
                });
            }
        } else {
            $('#sidebar').removeClass('fixed');
        }
    });
});

1 个答案:

答案 0 :(得分:2)

这一行:

if (y > top) {

假设你的固定标题没有填充(否则你也必须考虑到这一点)你可以改为这个

if (y >= top - $('#fixedHeader').height()) {

从侧边栏css中删除top:0px;,然后为固定标题添加预期的高度(目前你给它的高度为40px),所以

#sidebar.fixed {
  position: fixed;
  top: 40px;
}

我还删除了#fixedHeader中的填充内容,因为您没有指定它是什么/如果您想要的话。如果您确实需要填充,如上所述,您还必须将其添加到计算中。

http://jsfiddle.net/VtPcm/706/