Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помогите использовать функцию onscroll (https://javascript.ru/forum/jquery/78978-pomogite-ispolzovat-funkciyu-onscroll.html)

laimas 01.12.2019 14:48

Цитата:

Сообщение от 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");

ozoro 01.12.2019 15:24

Цитата:

Сообщение от laimas (Сообщение 516605)
Это .css("top", scrtop) зачем?

Это для того, чтобы после открытия окна страница не скролилась наверх.

Если не трудно, исправь мой код, по твоему варианту, а то не пойму что куда нужно вставить.

laimas 01.12.2019 15:30

Цитата:

Сообщение от 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'));
});

ozoro 01.12.2019 15:47

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

Поэтому как-то надо еще и .css("top", scrtop) прикрутить, чтобы позиция не менялась.

ozoro 01.12.2019 15:55

Вот так заработало как надо:
//открытие модального окна
$(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'));
});


Огромная благодарность за помощь!

laimas 01.12.2019 15:57

Цитата:

Сообщение от ozoro
но при открытии окна страница вначале скролится наверх

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

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

Если при этом $(window).scrollTop() запоминает позицию уже с этой прокруткой, то попробуйте удалять этот класс в событии show.bs.modal

laimas 01.12.2019 15:59

Цитата:

Сообщение от ozoro
var scl = "-"+$(window).scrollTop()+"px";

Это все глупости, подогнать под ответ называется. Выясните причину и блокируйте ее.

ozoro 01.12.2019 16:06

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

Это ведь не может влиять на то, что при открытии скролится вверх?

laimas 01.12.2019 16:11

Цитата:

Сообщение от ozoro
Это ведь не может влиять на то, что при открытии скролится вверх?

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

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

ozoro 01.12.2019 16:22

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

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

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


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


Часовой пояс GMT +3, время: 15:42.