01.12.2019, 14:48
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от ozoro
|
Вот эта функция определяет сразу при скроле значение
|
При вызове окна это имеет значение? Вам же нужно запомнить позицию прокрутки на момент вызова окна, а после закрытия его восстановить:
Open: получить текущую позицию $(window).scrollTop(), запомнить ее (это удобно делать в .data() объекта, которым и манипулируете) и только затем $("body").css("position","fixed"). Это .css("top", scrtop) зачем?
Close: $("body").removeAttr("style") - сбросили стили, затем восстановили позицию $(window).scrollTop(объект_хранящий_ позицию.data('имя')). И не обязательно .removeAttr("style"), можно и $("body").css("position","static");
Последний раз редактировалось laimas, 01.12.2019 в 15:14.
|
|
01.12.2019, 15:24
|
|
Аспирант
|
|
Регистрация: 04.05.2019
Сообщений: 80
|
|
Сообщение от laimas
|
Это .css("top", scrtop) зачем?
|
Это для того, чтобы после открытия окна страница не скролилась наверх.
Если не трудно, исправь мой код, по твоему варианту, а то не пойму что куда нужно вставить.
|
|
01.12.2019, 15:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от ozoro
|
Это для того, чтобы после открытия окна страница не скролилась наверх.
|
Выбросить, это ни к чему.
var scl = $(window).scrollTop();
var scrtop = "-"+scl+"px";
//открытие модального окна
$(document).on("shown.bs.modal", ".modal", function () {
// Когда модальное окно открыто, фиксируем элемент body
$(this).data({top: $(window).scrollTop()});
$("body").css("position", "fixed");
});
// закрытие модального окна
$(document).on("hidden.bs.modal", ".modal", function () {
// Когда модальное окно скрыто...
$("body").css("position", "static");
$(window).scrollTop($(this).data('top'));
});
|
|
01.12.2019, 15:47
|
|
Аспирант
|
|
Регистрация: 04.05.2019
Сообщений: 80
|
|
laimas,
Так работает, но при открытии окна страница вначале скролится наверх, а при закрытии окна возвращается в то место где кнопка вызова (то есть откуда вызывалось окно, например, страница прокручена на 1200px вниз, там кнопка вызова, нажимаем и страница прокручивается вверх в шапку сайта, а при закрытии возвращается опять на 1200px вниз).
Поэтому как-то надо еще и .css("top", scrtop) прикрутить, чтобы позиция не менялась.
|
|
01.12.2019, 15:55
|
|
Аспирант
|
|
Регистрация: 04.05.2019
Сообщений: 80
|
|
Вот так заработало как надо:
//открытие модального окна
$(document).on("shown.bs.modal", ".modal", function () {
// Когда модальное окно открыто, фиксируем элемент body
$(this).data({top: $(window).scrollTop()});
var scl = "-"+$(window).scrollTop()+"px";
$("body").css("position", "fixed").css("top", scl);
});
// закрытие модального окна
$(document).on("hidden.bs.modal", ".modal", function () {
// Когда модальное окно скрыто...
$("body").css("position", "static");
$(window).scrollTop($(this).data('top'));
});
Огромная благодарность за помощь!
|
|
01.12.2019, 15:57
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от ozoro
|
но при открытии окна страница вначале скролится наверх
|
Значит ей добавляется что-то каким-то сценарием. Открывайте отладчик и следите за тегом body. Если это добавление некоторого класса, то при открытии:
$("body").removeClass('name').css("position", "fixed");
Если при этом $(window).scrollTop() запоминает позицию уже с этой прокруткой, то попробуйте удалять этот класс в событии show.bs.modal
|
|
01.12.2019, 15:59
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от ozoro
|
var scl = "-"+$(window).scrollTop()+"px";
|
Это все глупости, подогнать под ответ называется. Выясните причину и блокируйте ее.
|
|
01.12.2019, 16:06
|
|
Аспирант
|
|
Регистрация: 04.05.2019
Сообщений: 80
|
|
В body добавляется класс modal-open и больше ничего.
Правила этого класса
.modal-open {
overflow: hidden;
}
Это ведь не может влиять на то, что при открытии скролится вверх?
|
|
01.12.2019, 16:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от ozoro
|
Это ведь не может влиять на то, что при открытии скролится вверх?
|
Нет. Но если возникает прокрутка, то либо это работа сценария какого либо, либо css, и класс может добавляться тегу html. В общем нужно анализировать/выяснять. А событий два: show - возникает на момент показа, shown - когда полностью показано. Выяснив причину, можно устранять ее еще до полного показа окна.
PS. А собственно да, вы же пытаетесь оставить при fixed ту позицию, которая была на момент прокрутки? Все верно, запомнить ее, и на это же значение с отрицательным знаком вверх. Это я запутал. )
Последний раз редактировалось laimas, 01.12.2019 в 16:16.
|
|
01.12.2019, 16:22
|
|
Аспирант
|
|
Регистрация: 04.05.2019
Сообщений: 80
|
|
Буду икать причину...
Еще раз благодарю за помощь.
Еще вопрос, вот хочу тебе отзыв оставить в благодарность, да и некоторым помогающим ранее в других темах пытался, но постоянно получаю сообщение:
Я тебе оставлял отзыв, но после уже многим оставил... это что, глюк (баг) какой-то?
Последний раз редактировалось ozoro, 01.12.2019 в 16:39.
|
|
|
|