禁用iPhone Web应用程序中的滚动?

有没有什么办法可以完全禁用iPhone网页应用程序的网页滚动? 我已经尝试过在谷歌上发布大量的东西,但似乎没有工作。

这是我目前的标题设置:

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;"/> <meta name="apple-mobile-web-app-capable" content="yes"/> 

document.body.addEventListener('touchmove', function(e){ e.preventDefault(); });

似乎没有工作。

'self.webView.scrollView.bounces = NO;'

只需在应用程序的mainViewController.m文件的“viewDidLoad”中添加这一行即可。 你可以在Xcode中打开它并添加它。

这应该使页面没有任何橡皮筋反弹仍然在应用程序视图中启用滚动。

更改为touchstart事件而不是touchmove 。 在一个手指事件下,它表示在平移过程中不发送任何事件,所以touchmove可能为时已晚。

我将侦听器添加到文档中,而不是正文。

例:

 document.ontouchstart = function(e){ e.preventDefault(); } 
 document.addEventListener('touchstart', function (e) { e.preventDefault(); }); 

不要使用ontouchmove属性来注册事件处理程序,因为您有可能覆盖现有的事件处理程序。 改用addEventListener (请参阅MDN页面上有关IE的注意事项)。

请注意,防止windowdocument上的touchstart事件的默认值将禁止滚动下降的区域。

要防止文档滚动,但保持所有其他事件不变,请防止touchmove的第一个touchmove事件的默认值:

 var firstMove; window.addEventListener('touchstart', function (e) { firstMove = true; }); window.addEventListener('touchmove', function (e) { if (firstMove) { e.preventDefault(); firstMove = false; } }); 

这个原因是因为移动Safari正在使用第一步来确定文档正文是否正在滚动。 我已经意识到这一点,同时devise一个更复杂的解决scheme。

如果这样做会停止工作,更复杂的解决scheme是检查touchTarget元素及其父项,并制作可滚动的方向图。 然后使用第一个touchmove事件来检测滚动方向,并查看是否要滚动文档或目标元素(或目标元素父项):

 var touchTarget, touchScreenX, touchScreenY, conditionParentUntilTrue, disableScroll, scrollMap; conditionParentUntilTrue = function (element, condition) { var outcome; if (element === document.body) { return false; } outcome = condition(element); if (outcome) { return true; } else { return conditionParentUntilTrue(element.parentNode, condition); } }; window.addEventListener('touchstart', function (e) { touchTarget = e.targetTouches[0].target; // a boolean map indicating if the element (or either of element parents, excluding the document.body) can be scrolled to the X direction. scrollMap = {} scrollMap.left = conditionParentUntilTrue(touchTarget, function (element) { return element.scrollLeft > 0; }); scrollMap.top = conditionParentUntilTrue(touchTarget, function (element) { return element.scrollTop > 0; }); scrollMap.right = conditionParentUntilTrue(touchTarget, function (element) { return element.scrollWidth > element.clientWidth && element.scrollWidth - element.clientWidth > element.scrollLeft; }); scrollMap.bottom =conditionParentUntilTrue(touchTarget, function (element) { return element.scrollHeight > element.clientHeight && element.scrollHeight - element.clientHeight > element.scrollTop; }); touchScreenX = e.targetTouches[0].screenX; touchScreenY = e.targetTouches[0].screenY; disableScroll = false; }); window.addEventListener('touchmove', function (e) { var moveScreenX, moveScreenY; if (disableScroll) { e.preventDefault(); return; } moveScreenX = e.targetTouches[0].screenX; moveScreenY = e.targetTouches[0].screenY; if ( moveScreenX > touchScreenX && scrollMap.left || moveScreenY < touchScreenY && scrollMap.bottom || moveScreenX < touchScreenX && scrollMap.right || moveScreenY > touchScreenY && scrollMap.top ) { // You are scrolling either the element or its parent. // This will not affect document.body scroll. } else { // This will affect document.body scroll. e.preventDefault(); disableScroll = true; } }); 

这个原因起作用的原因是,移动Safari使用第一个触摸动作来确定文档正在滚动还是元素(或目标元素父项),并坚持这一决定。

如果你使用的是jQuery 1.7+,这个效果很好:

 $("donotscrollme").on("touchmove", false); 

这应该工作。 没有更多的灰色地带在顶部或底部:)

 <script type="text/javascript"> function blockMove() { event.preventDefault() ; } </script> <body ontouchmove="blockMove()"> 

但是这也禁用了任何可滚动的区域。 如果你想保持你的可滚动区域,并仍然删除顶部和底部的橡皮筋效果,请参阅: https : //github.com/joelambert/ScrollFix 。

禁用:

 document.ontouchstart = function(e){ e.preventDefault(); } 

启用:

 document.ontouchstart = function(e){ return true; } 

该页面必须从主屏幕启动,才能使用元标记。

 document.ontouchmove = function(e){ e.preventDefault(); } 

实际上是我发现的最好的select,它允许你仍然能够点击input字段,以及拖动使用jQuery UI可拖动的东西,但它停止滚动页面。

我试过以上的答案,特别是Gajus的,但没有任何作品。 最后,我find了下面的答案来解决这个问题,只有主体不滚动,但我的networking应用程序内的其他滚动部分都工作正常。 简单地设置为您的身体固定的位置:

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