这个功能现在应用的非常普遍,如果页面比较高,当滚动条拖到页面的下面的时候,侧边栏会出现一个固定跟随浏览器的DIV框,现思路是这样的:首先获取需要跟随的DIV距离页面顶部的距离,然后判断,当浏览器滚动的距离大于该DIV本身距离顶部距离的时候,则添加CSS属性fixed即可。
代码如下
HTML代码:
1
2
3
4
5
6
|
< div id = "header" >header</ div >
< div id = "sidebarWrap" >
< div id = "sidebar" >Sidebar</ div >
</ div >
< div id = "main" >Main</ div >
< div id = "footer" >footer</ div >
|
CSS代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
body {
margin : 10px auto ;
font-family : sans-serif ;
width : 500px ;
}
div {
border-radius: 5px ;
box-shadow: 1px 2px 5px rgba( 0 , 0 , 0 , 0.3 );
border : 1px solid #ccc ;
padding : 5px ;
}
#sidebarWrap {
height : 400px ;
width : 210px ;
float : right ;
position : relative ;
box-shadow: none ;
border : none ;
margin : 0 ;
padding : 0 ;
}
#main {
width : 270px ;
height : 4000px ;
}
#footer {
clear : both ;
margin : 10px 0 ;
}
#sidebar {
width : 200px ;
height : 300px ;
position : absolute ;
}
#header {
height : 200px ;
margin-bottom : 10px ;
}
#sidebar. fixed {
position : fixed ;
top : 0 ;
}
#footer { height : 600px ; }
#footer { height : 600px ; }
|
JavaScript代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$( function () {
var top = $( '#sidebar' ).offset().top - parseFloat($( '#sidebar' ).css( 'marginTop' ).replace(/auto/, 0));
var footTop = $( '#footer' ).offset().top - parseFloat($( '#footer' ).css( 'marginTop' ).replace(/auto/, 0));
var maxY = footTop - $( '#sidebar' ).outerHeight();
$(window).scroll( function (evt) {
var y = $( this ).scrollTop();
if (y > top) {
if (y < maxY) {
$( '#sidebar' ).addClass( 'fixed' ).removeAttr( 'style' );
} else {
$( '#sidebar' ).removeClass( 'fixed' ).css({
position: 'absolute' ,
top: (maxY - top) + 'px'
});
}
} else {
$( '#sidebar' ).removeClass( 'fixed' );
}
});
});
|