これは私がこれまでに得た最良の解決策です。そして、私が他のすべてを試したと信じてください。これが私が思いついた最良かつ最も簡単な解決策です. これは、ページを右から押してシステムのスクロールバー用のスペースを確保する Windows デバイスや、ブラウザーのスクロールバー用のスペースを必要としないIOS デバイスでうまく機能します。したがって、これを使用すると、右側にパディングを追加する必要がなくなるため、本文または html のオーバーフローを css で非表示にしてもページがちらつきません。
考えてみれば、解決策は非常に簡単です。アイデアは、ポップアップが開かれた瞬間にwindow.scrollTop()に同じ正確な位置を与えることです。また、ウィンドウのサイズが変更されたときにその位置を変更します(スクロール位置が変更されると)。
では、行きましょう...
まず、ポップアップが開いていることを知らせる変数を作成し、それをstopWindowScrollと呼びます。これを行わないと、ページで未定義の変数のエラーが発生し、アクティブでないとして 0 に設定されます。
$(document).ready(function(){
stopWindowScroll = 0;
});
次に、open popup 関数を、プラグインまたはカスタムとして使用しているポップアップをトリガーするコード内の任意の関数にすることができます。この場合、単純なドキュメント オン クリック機能を備えた単純なカスタム ポップアップになります。
$(document).on('click','.open-popup', function(){
// Saving the scroll position once opening the popup.
stopWindowScrollPosition = $(window).scrollTop();
// Setting the stopWindowScroll to 1 to know the popup is open.
stopWindowScroll = 1;
// Displaying your popup.
$('.your-popup').fadeIn(300);
});
次に行うことは、ポップアップを閉じる関数を作成することです。これは、既に作成したか、プラグインで使用している任意の関数にすることができます。重要なことは、stopWindowScroll変数を 1 または 0 に設定して、開いているか閉じているかを知るために、これら 2 つの関数が必要であるということです。
$(document).on('click','.open-popup', function(){
// Setting the stopWindowScroll to 0 to know the popup is closed.
stopWindowScroll = 0;
// Hiding your popup
$('.your-popup').fadeOut(300);
});
次に、window.scroll 関数を作成して、上記のstopWindowScrollが 1 (アクティブ) に設定されるとスクロールを防止できるようにします。
$(window).scroll(function(){
if(stopWindowScroll == 1) {
// Giving the window scrollTop() function the position on which
// the popup was opened, this way it will stay in its place.
$(window).scrollTop(stopWindowScrollPosition);
}
});
それでおしまい。ページの独自のスタイルを除いて、これが機能するために必要な CSS はありません。これは私にとって魅力のように機能し、あなたや他の人に役立つことを願っています.
JSFiddle での実際の例を次に示します。
JS フィドルの例
これが役に立ったかどうか教えてください。よろしく。