0

ポップアップボックスが表示されているときにbody要素のスクロールを無効にするスクリプトがありますが、ポップアップボックス(または本体以外のスクロールバー)のスクロールを無効にしたくないので、確立しましたポップアップボックス内の要素を選択して必要なものですが、その1つの要素だけでなく、すべてに対して機能するようにします。

 $('html').on('mousewheel DOMMouseScroll', "body", function(e) {
    var scrollTo = null;

    if (e.type == 'mousewheel') {
        scrollTo = (e.originalEvent.wheelDelta * -1);
    }
    else if (e.type == 'DOMMouseScroll') {
        scrollTo = 40 * e.originalEvent.detail;
    }

    if (scrollTo) {
        e.preventDefault();
        $(this).scrollTop(scrollTo + $(this).scrollTop());
    }
});


$('div').on('mousewheel DOMMouseScroll', ".photos", function(e) {
    e.stopPropagation();

});

したがって、私がやりたいのは、この2番目のスクリプトで、.photosを直接選択するのではなく、<body>の子を選択することです。

4

1 に答える 1

3

子セレクターを使用してみてください>。デリゲートノードセットでセレクターを使用しないでください。

$('body > *').on('mousewheel DOMMouseScroll', null, function(e) {
    e.stopPropagation();
});

の子孫が必要な場合は、ルールbodyを削除します。>

編集:
前のコードは、委任を無効にするセレクターを使用していました。それを指摘してくれた@RichardNeilIlaganに感謝します。

編集2:
ポップアップボックスの内容以外をスクロールしたい場合は、jQuery UIダイアログが「モーダル」モードで行うように、ポップアップで100%W x 100%Hのオーバーレイを使用してみませんか?次に、スクロールなしのハンドラーをフルウィンドウオーバーレイにアタッチすることがstopPropagationできます。ポップアップの背後にあるコンテンツに引き続きアクセスできるようにする必要がない限り、これは機能します。

于 2012-10-03T17:47:48.310 に答える