2013-10-13 183 views
1

我有一個雙列網站,右側列可在滾動時更改爲固定位置。 這是CSS:在調整窗口大小時保持「位置:固定」div的水平位置

#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位置= $( '#側邊欄')位置(); 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的瀏覽器中不起作用。任何幫助將會很受歡迎!

倫納特

+0

你嘗試趕上'resize'事件,並調用'scrollIntoView(真)'上你的'span8'元素? – JuSchz

回答

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

嘗試過你的第三個選項,它的工作原理雖然很瘋狂,但是會嘗試你的第一個選項,但不知道它是否適用於我的實際網站(這比jsfiddle示例更復雜)確實幫助我做好準備,thanx! – Lennart

+0

第一個應該是最簡單和最可靠的。 – CodeVirtuoso

相關問題