Javascript iOS Webapp:禁用除文本区域外的页面滚动

Javascript iOS Webapp:禁用除文本区域外的页面滚动,javascript,ios,web-applications,scroll,Javascript,Ios,Web Applications,Scroll,我正在为iOS制作一个网络应用程序。我希望它是不可滚动的,除了一个文本区域(需要滚动)。我试着四处看看类似的问题,比如这个问题,但运气不好(那个例子看起来最有希望,但我在Safari中遇到了“找不到变量节点”错误) 有人能帮我吗?谢谢 没有解决我的问题,但有帮助-标记的最佳答案您可以看到用户是否正在尝试滚动(通常一个手指在屏幕上移动表示滚动),并使用onTouchMove事件侦听器,防止默认和传播 var element = document.getElementById("textarea")

我正在为iOS制作一个网络应用程序。我希望它是不可滚动的,除了一个文本区域(需要滚动)。我试着四处看看类似的问题,比如这个问题,但运气不好(那个例子看起来最有希望,但我在Safari中遇到了“找不到变量节点”错误)

有人能帮我吗?谢谢


没有解决我的问题,但有帮助-标记的最佳答案

您可以看到用户是否正在尝试滚动(通常一个手指在屏幕上移动表示滚动),并使用onTouchMove事件侦听器,防止默认和传播

var element = document.getElementById("textarea");
element.addEventListener("touchmove",function(e){onTouchMove(e)},false);

function onTouchMove(e) {

    if(e.touches.length != 1) return;

    e.stopPropagation();
    e.preventDefault();

}

不管怎样,当涉及到滚动内部元素时,iDevices有点棘手;通常人们试图在内部元素上实现滚动效果:)

Hmmm。不幸的是,我已经用一个手指为textarea设置了滚动(我希望它的作用就像textarea是“背景”)。但我会看看你的代码,看看我是否能实现它,让它工作。谢谢编辑:是否有一种方法可以“覆盖”先前存在的函数(阻止正文中滚动的函数)?比如CSSY中的子项如何优先于更一般的子项,你可能已经明白了这一点;很抱歉反应太晚。如果使用addEventListener添加事件,可以指定事件如何使用最后一个布尔参数冒泡。嗯,现在我确定这一定是件愚蠢的事情,但我想不出来xD这是我的代码(函数中的操作被注释掉了atm)函数cancelEvent(){//alert(event);//event.preventDefault();//event.preventPropagation();}document.getElementById('display').addEventListener('touchmove',函数(e){cancelEvent(e)},false);document.getElementById('body').addEventListener('touchmove',函数(e){cancelEvent(e)},false);当我执行alert(event)时,它会给出“object touchevent”,但当我尝试preventDefault()和preventPropagation时,它会给出一个“null”错误。cancelEvent函数没有参数。还有,有没有id为“body”的元素,或者你想得到body元素?是的,哈哈,我真傻。所以我一直在玩弄传播,运气不好。我的想法是(不管怎样)防止传播并使用冒泡('false'参数),这样滚动条就可以正常用于文本框,但不会发送到body标签。然而,这对我不起作用。抱歉给你添麻烦了,有点像填鸭式的哈哈,但是我怎么能用它来隐藏身体的滚动呢?