如何在iOS设备(iPad,iPhone,Mac)上使用用户可控开关(启用/禁用)禁用滚动/滚动。

6

在StackOverflow上检查了许多与此话题相关的问题和答案,但提供的解决方案都不能可靠地工作。所有基于CSS、JavaScript、jQuery和混合解决方案都至少存在一个缺陷,防止滚动禁用和/或切换有效。

我还搜索了互联网,但没有找到一个好的答案。

目前我有这个函数:

function toggleScroll(btn, item) {
 $(btn).click(function() {
  $(item).toggleClass("noscroll");
 });
}

我希望能够在需要的类上添加overflow: hidden;,并在第二次点击时将其删除。

问题是,这段代码在iOS设备上无法工作。

如何让这在iOS设备上正常运行?

理想情况下,我更喜欢纯CSS解决方案。但我知道这可能不可能,特别是切换组件。

任何JavaScript或jQuery解决方案也可以。

提前致谢!

1个回答

3

使用jQuery在iOS设备(iPad、iPhone、Mac)上禁用滚动/滚动条

我认为这个方法可以接近您想要的效果。唯一的问题可能是切换按钮,它包括“启用”和“禁用”两个按钮。如果你想把切换按钮变成单按钮,也许你可以发布一个单独的问题或者其他人可以改进这个答案。(我基本上是个HTML/CSS/PHP程序员。对JS还比较新手。)

var disableScroll = false;
var scrollPos = 0;
function stopScroll() {
    disableScroll = true;
    scrollPos = $(window).scrollTop();
}
function enableScroll() {
    disableScroll = false;
}
$(function(){
    $(window).bind('scroll', function(){
         if(disableScroll) $(window).scrollTop(scrollPos);
    });
    $(window).bind('touchmove', function(){
         $(window).trigger('scroll');
    });
});

信用:https://dev59.com/5XTYa4cB1Zd3GeqPtlnN#17597303


使用CSS在iOS设备(iPad,iPhone,Mac)上禁用滚动/滚动

对于在iOS设备上禁用滚动的纯CSS解决方案,请尝试以下选项:
(当然,这些没有开关。)

html, body {
    position: fixed;
}

html, body {
    position: relative;
    overflow: hidden;
}

body {
    position: fixed;
    overflow: hidden;
}

body {
    position: fixed;
    height: 100%;
    overflow: hidden;
    width: 100%;
}

以下是我在这个问题上阅读的一些帖子和文章。


这些解决方案涵盖了通过按下2个按钮来启用和禁用。一个用于关闭,一个用于打开。如果只有一个按钮,我该如何做到这一点?点击=滚动关闭,再次点击=滚动打开? - Sebastian Alsina
这是我现在的代码:document.ontouchmove = function(e){ if(disableScroll){ e.preventDefault(); } } ... 当你将这段代码与其他代码一起运行时,我们可以进行测试。 - Michael Benjamin
好问题。我一直在专注于覆盖所有设备的解决方案。但是,如果你只需要iOS的东西,那么这可能会使过程更快、更容易。 - Michael Benjamin
我认为在iOS中没有纯CSS解决方案。但是要禁用iOS中的滚动,请将此代码放在JS文件的开头。document.ontouchmove = function(event){ event.preventDefault(); } - Michael Benjamin
是的,我知道。我已经停止尝试自己编写代码,只是在寻找一个成熟的解决方案。iOS确实不容易。不仅仅是滚动,而且我看到很多关于如何去除滚动末端的“弹跳”效果的问题。 - Michael Benjamin
显示剩余11条评论

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