当页面滚动到特定位置后停止滚动

4

当scrollTop达到某个值(比如150)后,如何防止滚动。

$(window).scroll(function() {   
    if($(window).scrollTop() >=50)) {
       return false;    // basically don't scroll       
    }
});

我建议您如果有其他选择的话不要停止这个浏览器行为。用户可能会感到烦恼。 - ShankarSangoli
.scrollTop使用scrollTo函数设置scrollHeight。它不会从x滚动到y,而是直接到达y。因此,基本上您无法停止滚动,因为事件将在其设置为y之后调用。在比较高度后,在处理程序中可能会设置所需的scrollHeightif($(window).scrollTop() >=50) { $(window).scrollTop(0); } - 注意:在元素上使用它是可以忍受的,但在窗口对象上使用它会让用户感到烦恼。上面只是为了展示它的工作原理。尝试在>> http://jsfiddle.net/KwgMj/ <<中滚动并看看它有多烦人。 - Selvakumar Arumugam
3个回答

5

.scrollTop 使用 scrollTo 函数设置 scrollHeight,它不会从 x 滚动到 y,只是直接滚动到 y。

所以基本上你无法停止滚动,因为事件在滚动到 y 后才被调用。在比较高度后,在处理程序中可能需要设置所需的 scrollHeight

if($(window).scrollTop() >=50) 
{ 
    $(window).scrollTop(0); 
}

注意:在元素上使用它是可以忍受的,但在window对象上使用会让用户感到烦恼。上面只是为了展示它的工作原理。

尝试在 >> http://jsfiddle.net/KwgMj << 中滚动并看看它有多烦人。


1
通过设置大于0的值,滚动条就不会抖动。 - Ram
@Raminson 从技术上讲,它可以达到50像素,但这只是为了向OP展示拥有滚动条并禁用滚动条可能会对用户造成麻烦。 - Selvakumar Arumugam
是的,你说得对,防止用户滚动非常烦人。 - Ram

3
$(window).scroll(function(e) {   
    if($(window).scrollTop() >=50)) {
      $(window).scrollTop(50)
    }
});

1
@user1184100 请尝试更新的答案,您可以手动更改scrollTop的值。 - Ram

1

除了显而易见的问题,你为什么想要这个呢?

我建议另一种方法。

有一个填满整个窗口的包装器,有一定的高度,并在css中使用overflow-x: hidden

这可能是你想要的,也可能不是。

如果你希望制作一个连续的网站,允许你继续滚动到下一步,我建议你简单地使用.slideDown()相关内容。

滚动是一个非常基本的功能,没有充分的理由不应该进行修改。

编辑:
对于iPad特定的解决方案,请使用包装器:

<? if (strpos($_SERVER['HTTP_USER_AGENT'],'iPad')): ?>
<!-- If iPad, add style -->
<style type="text/css">
    div#wrapper {
        height: 100%;
        overflow: hidden;
    }
</style>
<? endif; ?>

<body>
<div id="wrapper">
<!-- Content here -->
</div>
</body>

我正在尝试在iPad上阻止滚动以修复一个错误,所以我在查看是否可以通过脚本来阻止滚动。 - user1184100

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接