我正在开发一个基于iPad的网络应用程序,需要防止过度滚动,以免它看起来像网页.我目前正在使用它来冻结视口并禁用过度滚动:
document.body.addEventListener('touchmove',function(e){
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
这可以很好地禁用过度滚动,但我的应用程序有几个可滚动的div,上面的代码阻止它们滚动.
我只针对iOS 5及以上版本,所以我避免使用像iScroll这样的hacky解决方案.相反,我将这个CSS用于我的可滚动div:
.scrollable {
-webkit-overflow-scrolling: touch;
overflow-y:auto;
}
Run Code Online (Sandbox Code Playgroud)
这没有文档overscroll脚本,但不解决div滚动问题.
没有jQuery插件,有没有办法使用过度滚动修复但免除我的$('.scrollable')divs?
编辑:
我发现了一些不错的解决方案:
// Disable overscroll / viewport moving on everything but scrollable divs
$('body').on('touchmove', function (e) {
if (!$('.scrollable').has($(e.target)).length) e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
滚动浏览div的开头或结尾时,视口仍会移动.我想找到一种方法来禁用它.
我正在创建一个iPhone Web应用程序,你现在,因为iOS5,能够使用position:fixed; 标题等
虽然它有效但是如果你向上滚动页面的顶部,它会显示通常的灰色区域一段时间,然后你就不能再滚动了

有没有办法阻止这种滚动?我尝试过像溢出这样的东西:隐藏; 但我似乎找不到任何东西.
PS我只想要一件事停止滚动,我有一个名为#container的div,我仍然希望能够滚动.
我想在webapp中禁用iOS过度滚动但仍然允许滚动主体.
$(document).on('touchmove', function(e) {
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
完全禁用滚动(正如人们所期望的那样).
有办法做我想做的事吗?
在复习有关StackOverflow上该主题的许多问题和答案时,提供的所有解决方案均无法可靠地工作。所有CSS,JavaScript,jQuery和混合解决方案都至少存在一个缺陷,导致滚动无法有效禁用和/或切换。
我还在网上搜索了很多内容,但没有找到一个好的答案。
到目前为止,我具有此功能:
function toggleScroll(btn, item) {
$(btn).click(function() {
$(item).toggleClass("noscroll");
});
}
Run Code Online (Sandbox Code Playgroud)
...这会将a添加overflow: hidden;到我想要的任何类中onclick,并在第二次单击时将其删除。
问题是,此代码不适用于iOS设备。
如何在iOS设备上使用此功能?
理想情况下,我希望使用纯CSS解决方案。但是我知道这可能是不可能的,尤其是切换组件。
任何JavaScript或jQuery解决方案也都可以。
提前致谢!