调整窗口大小时,保持“position:fixed”div的水平位置

时间:2013-10-13 15:02:47

标签: jquery html css

我有一个双栏网站,右侧列在滚动时会更改为固定位置。 这是css:

#sidebar {
padding: 5px;
width: 200px;
float: left;
background-color: yellow;
}

.fixed {
position: fixed;
padding: 5px;
background-color: yellow;
}

.span8 {
padding: 5px;
width: 400px;
float: left;
background-color: blue;
}

这是javascript:     var position = $('#sidebar')。position();         var offset = $(“#sidebar”)。offset();

    $(window).scroll(function() {          

        if ($(window).scrollTop() > offset.top) {
            $('#sidebar').addClass('fixed');
            $('.fixed').css("top", 0);  
            $('.fixed').css("left", position.left);
         } 

        else {
            $('#sidebar').removeClass('fixed');

        }


    }); 

这是html:     

大标题

<div class="span8">
  <h4>This is the main column</h4>
  <p> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod    tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.<p>
</div>
<div id="sidebar">
  <h4>Hello!</h4>
  <p>This is a fixed a fixed sidebar on scroll</p>
</div>

一切正常,请参阅jsfiddle http://jsfiddle.net/LennartJagt/MAKYb/2/唯一的问题是,当用户重新调整窗口大小时,侧边栏会保持在其原始水平位置。我无法弄清楚如何使这项工作调整大小。

令人烦恼的是,jsfiddle使它看起来很完美但是在没有jsfiddle的浏览器中它不起作用。任何帮助都会非常有用!

Lennart

1 个答案:

答案 0 :(得分:0)

无法重现您的问题,对我而言,它有效。但它确实会眨眼并偶尔消失。

一些建议:

1)为什么不去纯CSS?没有任何javascript,这对我来说非常有用:

#sidebar {
padding: 5px;
width: 200px;
background-color: yellow;
position:relative;
left:410px;
top:0;
}


.span8 {
padding: 5px;
width: 400px;
float: left;
background-color: blue;
position:absolute;
}       

2)你在这里有什么:

$('.fixed').css("left", position.left);

仅在position.left为0时才有效。要使其始终有效,请指定它以像素为单位,如下所示:

$('.fixed').css("left", position.left + "px");

3)这是完全未经测试的,但假设您的原始代码适合您,也许这可行。简单地说:将定位代码包装到一个函数中,然后在窗口滚动和窗口调整大小事件上调用此函数:

function positionSidebar() {
    var position = $('#sidebar').position();
    var offset = $("#sidebar").offset();    

    if ($(window).scrollTop() > offset.top) {
        $('#sidebar').css('fixed');  
        $('#sidebar').css("left", position.left);
     } 

    else {
        $('#sidebar').removeClass('fixed');
    }       
}

$(window).scroll(function() {         
    positionSidebar();
}); 

$(window).resize(function() {         
    positionSidebar();
});