我如何处理网页和移动浏览器上的滚动?

How could I handle scroll on webpage and mobile browser?

我正在尝试建立一个网站。 客户的要求如下。

据我所知。我可以通过 'overflow' 关键字处理 CSS 的滚动。 我的策略是

这适用于网络浏览器。然而,当我在移动浏览器上尝试这个时,它以相反的方式工作。

我找到了一些文章,如果我使用 'overflow',它可能会导致如下问题 link。

Website will not scroll on mobile devices

这个问题有解决办法吗?如果我应该删除 'overflow',我应该用什么替换它?

谢谢 :D

================================

我在原始 post 之后尝试过的东西。

添加 javascript(4 月 22 日)

function toggleBackgroundScroll(){
    var cur = $('body').css('overflow');
    if(cur == null || typeof cur == 'undefined') cur = 'auto';

    if(cur != 'hidden'){
        //scroll, auto 
        //when div popup showed up 
        $('body').css('overflow', 'hidden');
        $('body').on('touchmove', function(e){
            //below alert works!
            //alert('touchmove prevent!');
            e.preventDefault();
        });
    }else{
        //hidden
        //when div pop up is disabled. 
        $('body').css('overflow', 'auto');
        $('body').on('touchmove', function(e){
        });
    }
}

感谢您的评论。(kevinAlbs) 但它仍然以相反的方式工作。 无法滚动弹出内容,但背景可以滚动

在移动浏览器上,我幸运地阻止了 ontouchmove 事件的默认操作。即

$("body").on("touchmove", function(e){
    if(modalOpen) { 
       e.preventDefault(); //disables scrolling on mobile only
    }
}

然后将 modalOpen 变量切换为 disable/enable 滚动。

我找到方法了:D

一切都是为了 CSS。我发现了一个 post(请理解我,我没有 link 因为它不是用英文写的)它说在移动环境浏览器中自动阻止 overflow 属性。

所以如果你想在移动端使用overflow,你应该添加一行CSS -webkit-overflow-scrolling : touch;。我已将其添加到 body 元素中,如下所示。

.body {
  -webkit-overflow-scrolling: touch;
}

希望这对像我这样的人有帮助 :)

  • 2015 年 4 月 27 日添加

关于这个的悲伤消息。上面的代码只适用于 iPhone4。在 iPhone5 等最近的模型中,进一步不起作用。用户仍然无法滚动弹出窗口的内容 div 但只能滚动背景:<