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,990
|
|
Вместо $("body").css("position","fixed").css("top", scrtop);
$("html").css("overflow","hidden");
и
$("html").css("overflow","auto");
соответственно. А фиксировать окно.
|
|
01.12.2019, 09:39
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от 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,990
|
|
Кто скролится, окно? Если оно вызывается в любом месте страницы, то оно фиксируется либо к верхнему краю, либо по центру вертикали. А overflow hidden/auto, это запрет скролла документа, чтобы после закрытия окна была прежняя позиция.
|
|
01.12.2019, 09:50
|
|
Аспирант
|
|
Регистрация: 04.05.2019
Сообщений: 80
|
|
Сообщение от рони
|
type="button" в кнопке закрыть есть?
|
Да, есть... но окно закрывается не только по кнопке, но и по клику за пределами окна.
|
|
01.12.2019, 09:52
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Да какая разница как оно закрывается, кнопкой, щелчком вне его, 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,990
|
|
<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
|
как сделать чтобы контент элементы не сдвигались вправо когда пропадает скролл?
|
Никак, это увеличивается размер клиентской области, за счет размера полосы прокрутки. Добавить телу отступ справа? Ну так будет пустая область.
|
|
|
|