一旦你把它分解成几个步骤,这并不太难......
首先,您需要在以下位置设置页面模板html
:
<div class="head">
<!-- HEAD CONTENT GOES HERE -->
</div>
<div class="main">
<div class="left">
<!-- LEFT BAR CONTENT GOES HERE -->
</div
><div class="right">
<!-- RIGHT BAR CONTENT GOES HERE -->
</div>
</div>
然后你需要设置它的样式,但是你希望它看起来像css
:
html, body{
margin:0;
padding:0;
}
.head{
height:30px;
width:100%;
background:#3B5998;
position:fixed;
top:0;
left: 0;
z-index:1000;
}
.main{
padding:30px 10px 5px;
max-width:1200px;
margin:auto;
}
.left{
vertical-align:top;
width:80%;
display:inline-block;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background:#eee;
}
.right{
vertical-align:top;
width:20%;
display:inline-block;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background:#ccc;
}
然后你需要了解完成这项工作需要什么......
首先,您需要知道:
- 观察窗高度
- 窗口滚动到的高度
- 右栏的高度
这个想法是让右栏 ( .right
) 与页面的其余部分一起滚动(就像在普通页面html
和css
上面一样),直到到达末尾.right
。
从数学上讲,这将在以下情况下发生:
window_height + scroll_height == right_bar_height
现在您知道何时需要停止 .right
滚动,您可以将其插入 if 语句并添加自定义css
以将右侧栏固定到位。
要在正确的位置进行修复.right
,您需要知道:
- 窗户的高度
- 的高度
.right
- 的宽度
.right
.right
查看窗口中的左偏移
然后,您将css
属性js
应用于修复.right
到正确的位置。即position
, top
,left
和width
。
- 您设置
position: fixed
以便.right
从页面的流程中取出。
- 您设置
left
为.left
偏移量和.left
宽度的总和
- 您设置
top
为window_height - right_bar_height
但仅当.right
高于窗口时
- 您设置
width
为所需的宽度。在这种情况下 20%.main
然后,您需要在每次页面时应用上述计算,scrolls
因此resizes
最好将其作为一个函数,您可以在任一事件中调用它。
function rightBarControl(){
var windowHeight = $(window).height();
var scrollHeight = $(window).scrollTop();
var rightBarWidth = $('.main').width()*.2 //20% of .main width
var rightBarHeight = $('.right').outerHeight();
var rightBarOffset = $('.left').offset().left + $('.left').outerWidth();
var rightBarTop = 30; //30 because .head is 30px high
if(windowHeight - 30 < rightBarHeight){ //Again including 30 because of .head
rightBarTop = windowHeight - rightBarHeight;
}
if((windowHeight + scrollHeight) >= rightBarHeight){
$('.right').css({
position:'fixed',
left: rightBarOffset,
top: rightBarTop,
width: rightBarWidth
})
}
else{
$('.right').css({
position: 'static',
left: '',
top: '',
width: '20%'
})
}
}
$(window).scroll(rightBarControl); //Run control on window scroll
$(window).resize(rightBarControl); //Run control on window resize
请注意此用法jquery
,因此您需要在上述脚本之前包含它,例如:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>