To najprostsze rozwiązanie, jakie do tej pory mam. I wierz mi, próbowałem wszystkich innych i to jest najłatwiejsze. Działa świetnie na urządzeniach z systemem Windows , które popychają stronę z prawej strony, aby mieć miejsce na systemowy pasek przewijania i urządzenia IOS, które nie wymagają miejsca na paski przewijania w przeglądarkach. Używając tego, nie będziesz musiał dodawać dopełnienia po prawej stronie, aby strona nie migała, gdy ukryjesz przepełnienie treści lub HTML za pomocą css .
Rozwiązanie jest dość proste, jeśli się nad tym zastanowić. Chodzi o to, aby nadać window.scrollTop () tej samej dokładnej pozycji w momencie otwarcia wyskakującego okienka. Zmień także tę pozycję, gdy zmienia się rozmiar okna (ponieważ pozycja przewijania zmienia się, gdy to nastąpi).
Więc zaczynamy...
Najpierw stwórzmy zmienną, która da ci znać, że okienko jest otwarte i nazwij go stopWindowScroll . Jeśli tego nie zrobimy, pojawi się błąd niezdefiniowanej zmiennej na stronie i ustawi się na 0 - jako nieaktywną.
$(document).ready(function(){
stopWindowScroll = 0;
});
Teraz zróbmy funkcję otwartego wyskakującego okienka, która może być dowolną funkcją w kodzie, która wyzwala dowolne wyskakujące okienko używane jako wtyczka lub niestandardowe. W tym przypadku będzie to zwykłe niestandardowe okno podręczne z prostym dokumentem po kliknięciu.
$(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);
});
Więc następną rzeczą, którą robimy, jest utworzenie funkcji zamykania wyskakującego okienka, którą powtarzam ponownie, może być dowolną funkcją, którą już utworzyłeś lub używasz we wtyczce. Ważne jest to, że potrzebujemy tych 2 funkcji, aby ustawić zmienną stopWindowScroll na 1 lub 0, aby wiedzieć, kiedy jest otwarta lub zamknięta.
$(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);
});
Następnie stwórzmy funkcję window.scroll, abyśmy mogli zapobiec przewijaniu, gdy wspomniany wyżej stopWindowScroll zostanie ustawiony na 1 - jako aktywny.
$(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);
}
});
Otóż to. Nie wymaga CSS, aby działał, z wyjątkiem własnych stylów strony. To działało jak urok dla mnie i mam nadzieję, że pomoże tobie i innym.
Oto działający przykład JSFiddle:
JS Fiddle Przykład
Daj mi znać, czy to pomogło. Pozdrowienia.