我正在尝试构建一个跟随用户滚动的右框:
CSS:
.clearfix:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
.wrapper {
border: 1px solid black;
}
.column {
float: left;
border: 1px solid red;
}
.relative {
position: relative;
margin-top: 0px;
}
HTML:
<div class="wrapper clearfix">
<div class="column">
small or big text
</div>
<div class="column">
<div class="dmap relative">a</div>
<span>some other crazy stuff</span>
</div>
</div>
Javascript:
referencey = $(".dmap").offset().top;
$(window).scroll(function (event) {
var y = $(this).scrollTop();
if (y >= referencey) {
$(".dmap").css("margin-top", y - referencey)
} else {
$(".dmap").css("margin-top", 0);
}
});
代码工作得很好。列大小无关紧要,因为我所做的只是更改顶部边距,这意味着列和包装器总是获得新的大小。代码的缺点是用户滚动时会出现小跳。
避免滚动时小跳跃的另一种方法是不更改 margin-top ,而是将框的位置更改为 fixed after y >= referencey
。该解决方案的缺点是相对于列大小的错误行为,因为当我将类更改为固定时,它不再占用右列内的空间,如果左列更小,则会出现一整套新错误.