| 
	| 
	
	| 
		
	| 
			
			 
			
				01.12.2019, 09:03
			
			
			
		 |  
	| 
		
			|  | Аспирант       |  | 
					Регистрация: 04.05.2019 
						Сообщений: 80
					 
		
 |  |  
	| 
				Помогите использовать функцию onscroll
			 Есть кнопка открытия модального окна ближе к низу страницы.  
При закрытии модального окна происходит скролл наверх страницы.
 
Необходимо чтобы при закрытии модального окна не скролило наверх страницы, а контент оставался в текущем положении.
Сделал вот так: 
var scl = $(window).scrollTop();
var scrtop = "-"+scl+"px";
//открытие модального окна
$(document).on("shown.bs.modal", ".modal", function () {
// Когда модальное окно открыто, фиксируем элемент body
$("body").css("position","fixed").css("top", scrtop);
});
// закрытие модального окна
$(document).on("hidden.bs.modal", ".modal", function () {
// Когда модальное окно скрыто...
$("body").removeAttr("style").removeAttr("class");
$(window).scrollTop(scl);
});
НО работает только если прокрутить до кнопки вниз и обновить страницу.
Динамически определить скролл не хватает знаний.
 
Конечно есть функция, которая динамически определяет скрол, но как ее прикрутить к вышеуказанному коду или как-то сделать по другому , ума не приложу.
Вот эта функция: 
$(window).on("scroll", function() {
$(window).scrollTop();
});
Заранее, благодарю!
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 09:26
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Вместо $("body").css("position","fixed").css("top", scrtop);
 $("html").css("overflow","hidden");
 
 и
 
 $("html").css("overflow","auto");
 
 соответственно. А фиксировать окно.
 |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 09:39
			
			
			
		 |  
	| 
		
			|  | Профессор       |  | 
					Регистрация: 27.05.2010 
						Сообщений: 33,150
					 
		
 |  |  
	| 
	
 
	| Сообщение от ozoro |  
	| При закрытии модального окна происходит скролл наверх страницы. |  
	
 type="button" в кнопке закрыть есть? |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 09:46
			
			
			
		 |  
	| 
		
			|  | Аспирант       |  | 
					Регистрация: 04.05.2019 
						Сообщений: 80
					 
		
 |  |  
	| laimas,
  
Сделал как сказал
 
//открытие модального окна
$(document).on("shown.bs.modal", ".modal", function () {
$("html").css("overflow","hidden");
});
// закрытие модального окна
$(document).on("hidden.bs.modal", ".modal", function () {
$("html").css("overflow","auto");
});
Но это не помогает, при открытии страница на месте, а при закрытии окна все равно скролится в самый верх. |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 09:50
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Кто скролится, окно? Если оно вызывается в любом месте страницы, то оно фиксируется либо к верхнему краю, либо по центру вертикали. А overflow hidden/auto, это запрет скролла документа, чтобы после закрытия окна была прежняя позиция. |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 09:50
			
			
			
		 |  
	| 
		
			|  | Аспирант       |  | 
					Регистрация: 04.05.2019 
						Сообщений: 80
					 
		
 |  |  
	| 
	
 
	| Сообщение от рони   |  
	| type="button" в кнопке закрыть есть? |  
	
 Да, есть... но окно закрывается не только по кнопке, но и по клику за пределами окна. |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 09:52
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| Да какая разница как оно закрывается, кнопкой, щелчком вне его, ESC ... |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 09:53
			
			
			
		 |  
	| 
		
			|  | Аспирант       |  | 
					Регистрация: 04.05.2019 
						Сообщений: 80
					 
		
 |  |  
	| 
	
 
	| Сообщение от laimas   |  
	| Кто скролится, окно? Если оно вызывается в любом месте страницы, то оно фиксируется либо к верхнему краю, либо по центру вертикали. А overflow hidden/auto, это запрет скролла документа, чтобы после закрытия окна была прежняя позиция. |  
	
 В том то и дело, после закрытия окна не остается преждняя позиция, а страница скролится наверх, то есть как после ctrl+F5 |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 10:21
			
			
			
		 |  
	| 
		
			|  | Аспирант       |  | 
					Регистрация: 04.05.2019 
						Сообщений: 80
					 
		
 |  |  
	| 
	
 
	| Сообщение от laimas   |  
	| Вместо $("body").css("position","fixed").css("top", scrtop); 
 $("html").css("overflow","hidden");
 
 и
 
 $("html").css("overflow","auto");
 
 соответственно. А фиксировать окно.
 |  
	
 так заработало, не знаю почему до этого не сработало   
Подскажите еще, как сделать чтобы контент элементы не сдвигались вправо когда пропадает скролл? |  |  
	| 
		
	| 
			
			 
			
				01.12.2019, 10:40
			
			
			
		 |  
	| 
		
			
			| Профессор       |  | 
					Регистрация: 14.01.2015 
						Сообщений: 12,989
					 
		
 |  |  
	| 
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<style>
body {
    margin: 0;
}
.overlap {
    position: fixed;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: #00000055;
    z-index: 100;
}
.modal {
    position: fixed;
    width: 400px;
    height: 200px;
    top: -200px;
    left: 50%;
    margin-left: -200px;
    background-color: #fff;
    border-radius: 0 0 10px 10px;
}
</style>
<script type="text/javascript">
$(function() {
    for(var i=1; i < 80; ++i) $('body').append('<p>'+i+'</p>');
    $('html').animate({
        scrollTop: 1000
    }, 500, function() {
        $("html").css("overflow","hidden");
        $('<div class="overlap"><div class="modal"><button>Close</button></div></div>')
            .appendTo('body')
            .find('.modal')
            .animate({top: 0}, 500)
            .find('button').click(function() {
                $(this).parent().animate({top: -200}, 500, function() {
                    $("html").css("overflow","auto");
                     $(this).parent().remove()
                })
            })
    });
});
</script>
</head>
<body>
</body>
</html>
На месте же документ остается? Overflow для html потому, что среди плагинов sticky есть один (какой именно теперь не помню), который отказывается работать после разрешения прокрутки если overflow определять для body.
 
	
 
	| Сообщение от ozoro |  
	| как сделать чтобы контент элементы не сдвигались вправо когда пропадает скролл? |  
	
 Никак, это увеличивается размер клиентской области, за счет размера полосы прокрутки. Добавить телу отступ справа? Ну так будет пустая область.
			
			
	
			
			
			
			
			
				  |  |  |  |