HTML ドキュメントがWebView ビューポート (別名、JS の window.height) よりも背が高くなければ、HTML+JS 側でもこれを行うことができます。これを行うには、適切な時点で「touchmove」イベントで preventDefault を呼び出します (つまり、要素とそのすべての親に、ユーザーが指を動かし始めた方向にスクロールするものが何もない場合)。
jQuery を使用せずに実際のコードを示しますが、Q.addEventListener と Q.removeEventListener を自分で実装する (または jQuery を使用する) 必要があります。
function _touchScrollingHandler(event) {
var p = event.target;
var pos;
var scrollable = null;
do {
if (!p.computedStyle) {
continue;
}
var overflow = p.computedStyle().overflow;
var hiddenHeight = p.scrollHeight - p.offsetHeight;
var s = (['hidden', 'visible'].indexOf(overflow) < 0);
if ((s || p.tagName === 'HTML') && hiddenHeight > 0) {
if ((Q.Pointer.movement.positions.length == 1)
&& (pos = Q.Pointer.movement.positions[0])) {
var sy = Q.Pointer.getY(event)
+ Q.Pointer.scrollTop();
if ((sy > pos.y && p.scrollTop == 0)
|| (sy < pos.y && p.scrollTop >= hiddenHeight)) {
continue;
}
}
scrollable = p;
break;
}
} while (p = p.parentNode);
if (!scrollable) {
Q.Pointer.preventDefault(event);
}
}
var Q = {
preventTouchScrolling: function () {
Q.addEventListener(window, 'touchmove', _touchScrollingHandler);
},
restoreTouchScrolling: function () {
Q.removeEventListener(window, 'touchmove', _touchScrollingHandler);
}
};