到目前为止,我有以下代码:
HTML
<div id="header"></div>
<div id="content">
<div class="sidebar-wrapper"></div>
</div>
<div class="session-wrapper"></div>
<div id="footer"></div>
CSS
#header {
height: 600px;
width: 100%;
background: black;
}
#content {
height: 2000px;
width: 100%;
background: #eeeeee;
}
.sidebar-wrapper {
width: 350px;
height: 350px; /*depends on content*/
background: rgba(0,0,0,0.2);
border-radius: 20px;
padding: 20px;
margin-top: 50px;
}
.session-wrapper {
height: 200px;
width: 100%;
background: #000000;
}
#footer {
width: 100%;
height: 500px;
background: #888;
}
jQuery
jQuery(window).scroll(function(e){
var sidebar = jQuery('.sidebar-wrapper');
var sessions = jQuery('.session-wrapper');
var scrollTop = jQuery(window).scrollTop(),
elementOffset = sidebar.offset().top,
distance = (elementOffset - scrollTop),
sessionOffset = sessions.offset().top;
var isPositionFixed = (sidebar.css('position') == 'fixed');
if(distance < 60 && (sessionOffset - elementOffset) > 800 && !isPositionFixed) {
sidebar.css({'position': 'fixed', 'top': '100px', 'width': '350px'});
}
if((sessionOffset - elementOffset) < 800 && isPositionFixed || scrollTop > 1900) {
sidebar.css({'position': 'static', 'top': '0px', 'width': '100%'});
}
});
参见JSFIDDLE
基本上,我试图实现的是,灰色框(sidebar-wrapper
)和你一起向下滚动页面,直到它离.sessions-wrapper
大约20像素,一旦它离开20像素,我就试图让它保持在这个位置,直到你向上滚动,它会和你一起向上滚动直到它到达顶部,直到它到达原始位置。我想我快到了,但我需要一些帮助才能让它发挥作用。。。
提前感谢!
您可以使用各种技术对此进行归档。新的position:sticky
属性实现了类似的结果:
#sidebar-wrapper{
position: -webkit-sticky;
position: -moz-sticky;
position: -o-sticky;
position: -ms-sticky;
position: sticky;
bottom: 0px;
line-height: 30px;
background: gray;
}
请参见此处:http://jsfiddle.net/4hznD/
但我认为你所看到的与此类似:http://jsfiddle.net/FDv2J/4/(摘自:jQuery滚动DIV:当DIV到达页脚时停止滚动)
你可以使用类似的代码(你应该调整它):
$(function() {
$.fn.scrollBottom = function() {
return $(document).height() - this.scrollTop() - this.height();
};
var $el = $('#sidebar>div');
var $window = $(window);
$window.bind("scroll resize", function() {
var gap = $window.height() - $el.height() - 10;
var visibleFoot = 172 - $window.scrollBottom();
var scrollTop = $window.scrollTop()
if(scrollTop < 172 + 10){
$el.css({
top: (172 - scrollTop) + "px",
bottom: "auto"
});
}else if (visibleFoot > gap) {
$el.css({
top: "auto",
bottom: visibleFoot + "px"
});
} else {
$el.css({
top: 0,
bottom: "auto"
});
}
});
});
希望它能有所帮助!