我忽略了你问的关于取消对接的问题。
看到这个更新的小提琴。(更新:这里有一个更新的。)
它包括对 HTML 和 CSS 的更改。基本上我在stickynav周围添加了一个容器,这样jquery就可以根据容器进行计算,然后将stickynav定位为固定位置。这样,当stickynav位置固定时,容器仍然有偏移量。
HTML
<body>
<div class="container">
<div id="stickyNav_container">
<div id="stickyNav">
<ul>
<li>Menu Item</li>
<li>Menu Item</li>
<li>Menu Item</li>
<li>Menu Item</li>
</ul>
</div>
</div>
</div>
</body>
CSS
body {
margin:auto;
}
.container {
width:100%;
height:1000px;
position:relative;
background:black;
}
#stickyNav_container {
position: absolute;
margin: 0 auto;
top: 300px;
}
#stickyNav_container, #stickyNav {
background:white;
height: 60px;
width: 300px;
}
#stickyNav ul {
float:left;
}
JS
$(document).ready(function () {
$(window).bind('scroll', function () {
var vPos = $(window).scrollTop();
var totalH = $('#stickyNav_container').offset().top;
var finalSize = totalH - vPos;
console.log(finalSize);
if (finalSize <= 0) {
$('#stickyNav').css({
'position': 'fixed',
'top': 0
})
} else {
$('#stickyNav').css({
'position': 'static'
})
}
});
});
旧答案:
看看这个更新的 jsfiddle。
http://jsfiddle.net/gLQtx/4/
但是,请注意,在它到达导航一次后,位置将固定在顶部,并且该元素的偏移量将始终为 0 或更小。所以导航永远不会“返回”到它的原始位置与你在这里得到的脚本。
$(document).ready(function () {
$(window).bind('scroll', function () {
var vPos = $(window).scrollTop();
var totalH = $('#stickyNav').offset().top;
var finalSize = totalH - vPos;
console.log(finalSize);
if (finalSize <= 0) {
$('#stickyNav').css({
'position': 'fixed',
'top': 0
})
} else {
$('#stickyNav').css({
'position': 'absolute'
})
}
});
});