
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
|
|
как сделать чтобы контент элементы не сдвигались вправо когда пропадает скролл?
|
Никак, это увеличивается размер клиентской области, за счет размера полосы прокрутки. Добавить телу отступ справа? Ну так будет пустая область.
|
|
|
|