我正在尝试使用“上移”和“下移”按钮创建单个页面,这会将窗口滚动到下一个或上一个部分(div)。我使用的方法很简单。例如,我有 5 个具有特殊 ID 的元素。我使用 jquery 创建了一个名为“pos”的数组,其中保存了所有元素的位置。单击“上移”和“下移”按钮我检查这个数组,如果它包含较低或较高值的位置 - 窗口滚动。
我创建了 jfiddle,所以你可以在这里查看这个例子 - http://jsfiddle.net/YbqAB/
它适用于 jfiddle 站点,但在我的页面上,当 $(window).scrollTop() 值等于当前位置时,即使存在下一个位置,“下移”按钮也不会滚动窗口。这个问题不是一成不变的——我多次刷新页面(CTRL + F5),有时我看到这个问题,有时没有。
因此,例如,如果我有 4 个位置的 div:0px、300px、500px、800px,当我单击“下移”按钮时,窗口成功滚动到 300px 的 div。但是当我再次单击“向下移动”按钮以移动到具有 500px 位置的下一个 div 时 - 没有任何反应。如果我用鼠标滚轮滚动窗口,只向下几个像素,“向下移动”按钮再次运行良好,并将窗口滚动到 500px 的 div。
我做错了什么?或者也许有人知道更简单的解决方案。谢谢。
HTML:
<div id="buttons">
<div id="top-button"> up </div>
<div id="bottom-button"> down </div>
</div>
<div id="position1"> First block </div>
<div id="position2"> Second block </div>
<div id="position3"> Third block </div>
<div id="position4"> Fourth block </div>
<div id="position5"> Fifth block </div>
CSS:
#buttons{
position: fixed;
right: 10px;
top: 50%;
}
#top-button,
#bottom-button{
width: 40px;
height: 40px;
background: orange;
margin-bottom: 10px;
font-size: 11px;
text-align: center;
line-height: 40px;
color: yellow;
}
#position1,
#position2,
#position3,
#position4,
#position5{
width: 100%;
height: 400px;
color: white;
text-align: center;
background: green;
border-bottom: 5px solid yellow;
padding-top: 20px;
}
查询:
var pos = [
0,
$("#position2").offset().top,
$("#position3").offset().top,
$("#position4").offset().top,
$("#position5").offset().top
];
var $root = $('html, body');
var current;
$("#buttons #top-button").click(function () {
$.each(pos, function(i,v){
if( v < $(window).scrollTop() ){
current = v;
}
});
$root.stop(true,true).animate({scrollTop:current},500);
});
$("#buttons #bottom-button").click(function () {
$.each( pos, function(i,v){
if( $(window).scrollTop() < v ){
$root.stop( true,true ).animate( {scrollTop: v}, 500);
return false;
}
});
});