AngularJS/Cordova ハイブリッド アプリケーションの特定の要素とその子を除いて、デフォルトでスクロールを無効にしたいと考えています。
アプリに jQuery を導入したくないので、Angular の jqlite (jQuery の本質を取り除いたもの) を使用しようとしています。何か提案があれば、ディレクティブを使用して問題を解決することにもオープンです。
以下に示すように、jqlite の parent() メソッドを使用して、要素の親にスクロール可能なクラスがあるかどうかを確認しています。ただし、要素自体と DOM ツリーの親を確認する方がよいため、これは効果的ではありません。jQueryにはこれを行うparent()メソッドがありますが、jqliteにはありません。
jqlite を使用して要素のすべての親をチェックする方法、またはディレクティブから目的のソリューションを取得する方法はありますか?
// disable scrolling by default unless inside a `scrollable` element
document.addEventListener('touchmove', function (e) {
var scrollable = false;
// todo: need to go all the way up the DOM tree instead of just one level up
var items = angular.element(e.target).parent();
angular.forEach(items, function (o) {
var item = angular.element(o);
if (item.hasClass("scrollable")) {
scrollable = true;
}
});
if (!scrollable) {
e.preventDefault();
}
}, true);