我的 HTML 基本上是这样的:
<div id="#container">
<div id="left_col">
left stuff
</div>
<div id="middle_col">
middle stuff
</div>
<div id="right_col">
<div id="anchor"></div>
<div id="floater>
The problem div
</div>
</div>
</div>
容器 div 向左推 82px,因为我不希望最右边的列用作居中的一部分(上面有一个标题导航栏,它是 left_col 和 middle_col 的大小):
#container {
width: 1124px;
margin-left: auto;
margin-right: auto;
text-align: left;
color: #656f79;
position: relative;
left: 82px;
}
#left_col {
float:left;
width: 410px;
background-color: #fff;
padding-bottom: 10px;
}
#middle_col {
width: 545px;
float: left;
}
#right_col {
float: left;
width: 154px;
margin-left: 5px;
position:relative;
}
#floater {
width: 154px;
}
当您向下滚动页面时,我正在使用以下 javascript 来保持#floater div 的位置:
var a = function() {
var b = $(window).scrollTop();
var d = $("#anchor").offset().top;
var c = $("#floater");
if (b > d) {
c.css({position:"fixed",top:"10px"});
} else {
c.css({position:"absolute",top:""});
}
};
$(window).scroll(a);
a();
我遇到的问题是,在基于 WebKit 的浏览器中,一旦 jQuery 使浮动 div 的位置固定,因此它将与顶部保持 10px 的距离,#container 中的“left: 82px”会跳出窗口,导致 #floater 跳转 82px向左转。这不会发生在 FF 或 IE 中。有谁知道解决这个问题?
更新:已解决
我通过不使用固定定位,而是使用绝对定位解决了这个问题。如果 div#anchor 的顶部偏移量大于 $(window).scrollTop(),我更改了 javascript 以将 div#floater 的顶部 CSS 属性设置为基于值 $(window).scrollTop()。很简单。
所以 a() 函数现在看起来像这样:
var a = function() {
var b = $(window).scrollTop();
var d = $("#anchor").offset().top;
var c = $("#floater");
if (b > d) {
var t = b-200; //200px is the height of the header, I subtract to make it float near the top
c.css({top:t+"px"});
} else {
c.css({top:""});
}
};