在iOS上,我想仅禁用<body>
元素上的滚动,而不是<body>
元素中的元素。以下代码将禁用<body>
元素上的拖动,但也会阻止拖动子div:
$("body").bind("touchstart", function(e) {
e.preventDefault();
});
这是否只会影响父div,而不是父母(<body>
)中的子div?我想也许$("#yourdiv").parent()
可行,但没有运气。
编辑:此链接在解决同一问题时未能解决我的问题:prevent app dragging but permit scroll of inner div elements in ios
答案 0 :(得分:4)
$("body").bind("touchstart", function(e) {
if(e.target.nodeName === "BODY"){
e.preventDefault();
}
});
您可以查看该事件的target
- 不是100%确定这在iOS上是如何发生的,但我认为它应该没问题。
另一种可能性是阻止事件首先传播。
$("*:not(body)").bind('touchstart', function(e){
e.stopPropagation();
});
但这只是一个想法,我也不完全确定它会起作用。
答案 1 :(得分:3)
您还可以将this
与e.target
进行比较。
$("body").bind("touchstart", function(e) {
if (this === e.target) {
e.preventDefault();
}
});
答案 2 :(得分:0)
我不确定它在iOS上有多么不同(还没有在那里测试过),但这里是我如何解决Android上的问题。
解决方案涉及以下几点:
touchmove
事件touchmove
事件在您希望touchmove
处理的目标上冒泡到正文