0

在 iOS 上,我只想禁用<body>元素上的滚动,而不是元素内的<body>元素。以下代码将禁止拖动<body>元素,但也禁止拖动子 div:

$("body").bind("touchstart", function(e) {
    e.preventDefault();
});

无论如何,这是否只会影响父 div,而不是父 ( <body>) 中的子 div?我想也许$("#yourdiv").parent()会奏效,但没有运气。

编辑:这个链接,虽然它解决了同样的问题,但没有解决我的问题:防止应用程序拖动但允许在 ios 中滚动内部 div 元素

4

3 回答 3

4
$("body").bind("touchstart", function(e) {
    if(e.target.nodeName === "BODY"){
       e.preventDefault();
    }
});

您可以检查target事件的发生 - 不是 100% 确定这在 iOS 上是如何进行的,但我认为应该没问题。

另一种可能性是首先阻止事件传播。

$("*:not(body)").bind('touchstart', function(e){
  e.stopPropagation();
});

但这只是一个想法,我也不完全确定它会起作用。

于 2012-10-06T03:38:33.360 回答
3

您也可以thise.target.

$("body").bind("touchstart", function(e) {
    if (this === e.target) {
        e.preventDefault();
    }
});
于 2012-10-06T03:41:58.253 回答
0

我不确定它在 iOS 上会有多大不同(还没有在那里测试过),但这是我在 Android 上解决问题的方法。

JSBIN 演示

解决方案涉及几件事:

  1. 禁用默认 Bodytouchmove事件
  2. 防止事件在您要处理touchmove的目标上冒泡到正文touchmove
  3. 强制过度滚动允许的目标以冒泡并被否定
于 2014-06-05T09:36:11.943 回答