我意识到这是一个老话题。不过我最近需要实现这种性质的东西。下面是完成任务的代码(请记住,您可能需要修改css以使其显示在适合您需要的位置,我的是将元素停靠在屏幕顶部)。另外,这依赖于jQuery。
$(document).ready(function() {
// initialize the dock
Dock();
// add the scroll event listener
if (window.addEventListener) {
window.addEventListener('scroll', handleScroll, false);
} else {
window.attachEvent('onscroll', handleScroll);
}
});
function Dock() {
Dock.GetDock = document.getElementById('dockable');
Dock.NewScrollOffset = getScrollOffset();
Dock.DockBottomPos = getDockBottomPos();
Dock.DockTopPos = getDockTopPos();
}
function getScrollOffset() {
var scrollOffset = window.pageYOffset
? window.pageYOffset
: document.documentElement.scrollTop;
return scrollOffset;
}
function getDockBottomPos() {
var dockTopPos = getDockTopPos();
var dockHeight = $('#dockable').height();
return (dockTopPos + dockHeight);
}
function getDockTopPos() {
var dockTopPos = $('#dockable').offset().top;
return dockTopPos;
}
function handleScroll(){
if (window.XMLHttpRequest) {
// determine the distance scrolled from top of the page
Dock.NewScrollOffset = getScrollOffset();
if (Dock.NewScrollOffset >= Dock.DockBottomPos) {
Dock.GetDock.className = "fixed";
return;
}
if (Dock.NewScrollOffset <= Dock.DockTopPos) {
Dock.GetDock.className = "";
}
}
}
CSS:
#dockable
{
position: relative;
width: inherit;
}
#dockable.fixed
{
position: fixed;
top: 0px;
}
码头将是一个例子...
#dockable div
{
display: inline;
*zoom: 1;
height: 25px;
line-height: 25px;
padding: 5px 10px 5px 10px;
}
<div id="dockable">
<div><a href="#">Menu Item 1</div>
<div><a href="#">Menu Item 2</div>
<div><a href="#">Menu Item 3</div>
</div>
@roman,我们可以很容易地做这种东西,但你能解释更清晰如果可能的话 – kobe 2010-12-07 00:22:42
@gov - 当然。我有一个div元素,它的位置是:fixed和bottom:0px;这意味着它只是固定在底部。我希望它在底部达到80像素时停止修复(在向下滚动之后),并在我再次向上滚动时恢复修复。希望现在能更好地解释。 – Roman 2010-12-07 00:25:02