【问题标题】:Maintain horizontal position of a "position: fixed" div when resizing window调整窗口大小时保持“位置:固定”div的水平位置
【发布时间】:2013-10-13 23:44:26
【问题描述】:

我有一个两栏网站,右侧栏在滚动时会更改为固定位置。 这是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 的浏览器中它不起作用。任何帮助将不胜感激!

伦纳特

【问题讨论】:

  • 您是否尝试捕捉resize 事件,并在您的span8 元素上调用scrollIntoView(true)

标签: jquery html css


【解决方案1】:

无法重现您的问题,对我来说它有效。但它确实会偶尔闪烁并消失。

一些建议:

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();
});     

【讨论】:

  • 尝试了您的第三个选项,它可以工作,但会像疯了一样闪烁,会尝试您的第一个选项,但不知道它是否适用于我的实际网站(这比 jsfiddle 示例复杂一点)确实有帮助不过我已经出来了,谢谢!
  • 第一个应该是最简单最可靠的。
猜你喜欢
  • 2012-05-06
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多