Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 01.12.2019, 14:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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.
Ответить с цитированием
  #22 (permalink)  
Старый 01.12.2019, 15:24
Аватар для ozoro
Аспирант
Отправить личное сообщение для ozoro Посмотреть профиль Найти все сообщения от ozoro
 
Регистрация: 04.05.2019
Сообщений: 80

Сообщение от laimas Посмотреть сообщение
Это .css("top", scrtop) зачем?
Это для того, чтобы после открытия окна страница не скролилась наверх.

Если не трудно, исправь мой код, по твоему варианту, а то не пойму что куда нужно вставить.
Ответить с цитированием
  #23 (permalink)  
Старый 01.12.2019, 15:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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'));
});
Ответить с цитированием
  #24 (permalink)  
Старый 01.12.2019, 15:47
Аватар для ozoro
Аспирант
Отправить личное сообщение для ozoro Посмотреть профиль Найти все сообщения от ozoro
 
Регистрация: 04.05.2019
Сообщений: 80

laimas,
Так работает, но при открытии окна страница вначале скролится наверх, а при закрытии окна возвращается в то место где кнопка вызова (то есть откуда вызывалось окно, например, страница прокручена на 1200px вниз, там кнопка вызова, нажимаем и страница прокручивается вверх в шапку сайта, а при закрытии возвращается опять на 1200px вниз).

Поэтому как-то надо еще и .css("top", scrtop) прикрутить, чтобы позиция не менялась.
Ответить с цитированием
  #25 (permalink)  
Старый 01.12.2019, 15:55
Аватар для ozoro
Аспирант
Отправить личное сообщение для ozoro Посмотреть профиль Найти все сообщения от ozoro
 
Регистрация: 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'));
});


Огромная благодарность за помощь!
Ответить с цитированием
  #26 (permalink)  
Старый 01.12.2019, 15:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ozoro
но при открытии окна страница вначале скролится наверх
Значит ей добавляется что-то каким-то сценарием. Открывайте отладчик и следите за тегом body. Если это добавление некоторого класса, то при открытии:

$("body").removeClass('name').css("position", "fixed");

Если при этом $(window).scrollTop() запоминает позицию уже с этой прокруткой, то попробуйте удалять этот класс в событии show.bs.modal
Ответить с цитированием
  #27 (permalink)  
Старый 01.12.2019, 15:59
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ozoro
var scl = "-"+$(window).scrollTop()+"px";
Это все глупости, подогнать под ответ называется. Выясните причину и блокируйте ее.
Ответить с цитированием
  #28 (permalink)  
Старый 01.12.2019, 16:06
Аватар для ozoro
Аспирант
Отправить личное сообщение для ozoro Посмотреть профиль Найти все сообщения от ozoro
 
Регистрация: 04.05.2019
Сообщений: 80

В body добавляется класс modal-open и больше ничего.
Правила этого класса
.modal-open {
    overflow: hidden;    
}

Это ведь не может влиять на то, что при открытии скролится вверх?
Ответить с цитированием
  #29 (permalink)  
Старый 01.12.2019, 16:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ozoro
Это ведь не может влиять на то, что при открытии скролится вверх?
Нет. Но если возникает прокрутка, то либо это работа сценария какого либо, либо css, и класс может добавляться тегу html. В общем нужно анализировать/выяснять. А событий два: show - возникает на момент показа, shown - когда полностью показано. Выяснив причину, можно устранять ее еще до полного показа окна.

PS. А собственно да, вы же пытаетесь оставить при fixed ту позицию, которая была на момент прокрутки? Все верно, запомнить ее, и на это же значение с отрицательным знаком вверх. Это я запутал. )

Последний раз редактировалось laimas, 01.12.2019 в 16:16.
Ответить с цитированием
  #30 (permalink)  
Старый 01.12.2019, 16:22
Аватар для ozoro
Аспирант
Отправить личное сообщение для ozoro Посмотреть профиль Найти все сообщения от ozoro
 
Регистрация: 04.05.2019
Сообщений: 80

Буду икать причину...

Еще раз благодарю за помощь.

Еще вопрос, вот хочу тебе отзыв оставить в благодарность, да и некоторым помогающим ранее в других темах пытался, но постоянно получаю сообщение:


Я тебе оставлял отзыв, но после уже многим оставил... это что, глюк (баг) какой-то?

Последний раз редактировалось ozoro, 01.12.2019 в 16:39.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться со скриптом Валерий1996 Общие вопросы Javascript 7 13.07.2015 21:41
Помогите пожалуйста изменить функцию AntonMs Общие вопросы Javascript 1 22.05.2015 23:37
Помогите оптимизировать скрипт смены изображений с анимацией Khmelevsky Элементы интерфейса 5 06.03.2010 19:02
Можно ли использовать функцию в качестве свойства свободно позиционируемого объекта Newgen Общие вопросы Javascript 0 24.07.2009 23:02
Корректно ли использовать подобную функцию в XST шаблоне artwalek Общие вопросы Javascript 1 03.03.2009 20:07