Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2017, 14:45   #1
way_forward
 
Регистрация: 23.05.2016
Сообщений: 6
По умолчанию Не запускается повторно slideDown()

Привет!

Пишу лендинг.
После первого экрана расположен блок с меню.
Когда прокручиваю страницу и блок с меню доходит до верха, добавляю класс с фиксированными позиционированием

Код:
window.onscroll = function() {
var scrolled = window.pageYOffset || document.documentElement.scrollTop;
var height_top_menu = Math.round($('.container_menu').offset().top);

if(scrolled > height_top_menu + 150) {
$('.container_menu_fixed').addClass("cm_fixed"); /* добавляю этот класс */
//$('.cm_fixed').slideDown();
$('.menu_fixed').addClass("m_fixed");
$('.menu_fixed_marg').addClass("m_fixed_marg");

} else if(scrolled < height_top_menu) {
//$('.cm_fixed').slideUp();
$('.container_menu_fixed').removeClass("cm_fixed"); /* удаляю класс */
$('.menu_fixed').removeClass("m_fixed");
$('.menu_fixed_marg').removeClass("m_fixed_marg");

}
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Когда возвращаю страницу вверх, класс удаляю. Все работает! Хочу сделать чтоб меню не жестко выскакивало при добавлении класса, а плавно появлялось. Использовал функцию slideDown() к добавленному классу. При первой прокрутке все красиво работает. Подымаю назад - стает на свои места. Все ОК. НО! При повторной прокрутке функция slideDown() уже не срабатывает и меню жестко выскакивает как и без нее. Пробовал сворачивать slideUp(), но сворачивается полностью и не обращает внимание на удаление класса, то есть меню полностью скрывается с страницы.

В чем проблема, как заставить функцию slideDown() срабатывать постоянно? Пробовал через animate() такая же история

Последний раз редактировалось Вадим Мошев; 13.10.2017 в 23:06.
way_forward вне форума Ответить с цитированием
Старый 13.10.2017, 15:39   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

даже если так?
Код:
$('.container_menu_fixed').addClass("cm_fixed").slideDown();
ADSoft вне форума Ответить с цитированием
Старый 13.10.2017, 15:44   #3
way_forward
 
Регистрация: 23.05.2016
Сообщений: 6
По умолчанию

Такой же результат

Код:
if(scrolled > height_top_menu + 150) {
	  $('.container_menu_fixed').addClass("cm_fixed").slideDown();
	  //$('.cm_fixed').slideDown();
	  $('.menu_fixed').addClass("m_fixed");
	  $('.menu_fixed_marg').addClass("m_fixed_marg");
	  
	} else if(scrolled < height_top_menu) {
	  //$('.cm_fixed').slideUp();
	  $('.container_menu_fixed').removeClass("cm_fixed");
	  $('.menu_fixed').removeClass("m_fixed");
	  $('.menu_fixed_marg').removeClass("m_fixed_marg");
	  
	}
Пожалуйста, оформляйте Ваш код согласно правилам.

Результат тот же. Первый раз плавно появляется, а все остальные разы просто прыгает

Последний раз редактировалось Вадим Мошев; 13.10.2017 в 23:07.
way_forward вне форума Ответить с цитированием
Старый 14.10.2017, 20:06   #4
way_forward
 
Регистрация: 23.05.2016
Сообщений: 6
По умолчанию

Неужели никто не поможет решить эту проблему? ((
way_forward вне форума Ответить с цитированием
Старый 14.10.2017, 21:02   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

да непонятно ж ... че там за классы итд .... замути проект в jsfidle - чтоб наглядно было видно, мож там че кто и покопается, если выложишь тут ссыль
ADSoft вне форума Ответить с цитированием
Старый 14.10.2017, 23:01   #6
way_forward
 
Регистрация: 23.05.2016
Сообщений: 6
По умолчанию

Вот, кажись, замутил https://jsfiddle.net/27Lmukak/1/
way_forward вне форума Ответить с цитированием
Старый 14.10.2017, 23:36   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А вы какого эффекта хотели добиться? Чтобы серою меню "прилипало" к верху окна браузера, когда прокрутка происходит? Так у меня оно из-за прокрутки "уползает" вверх за область видимости, а потом восстанавливается.
Вадим Мошев вне форума Ответить с цитированием
Старый 15.10.2017, 00:09   #8
way_forward
 
Регистрация: 23.05.2016
Сообщений: 6
По умолчанию

Так и должно быть, только восстановление должно быть плавным
Код:
$('.container_menu_fixed').addClass("cm_fixed").slideDown();
А у меня, на локальном, при первой прокрутке плавно, а при последующих просто "выпрыгивает". А здесь jsfiddle постоянно "выпрыгивает". Функция slideDown() не хочет работать
way_forward вне форума Ответить с цитированием
Старый 17.10.2017, 15:31   #9
way_forward
 
Регистрация: 23.05.2016
Сообщений: 6
По умолчанию

Проблема решена

slideDown после выполнения прописывал стили в первый div с классом .container_menu_fixed. Проблему решил добавив, при прокрутке вверх, метод удаления атрибута $('.container_menu_fixed').removeCl ass('cm_fixed').removeAttr('style') ;

Теперь все отлично работает.
way_forward вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает slideDown() с первого раза scalpel JavaScript, Ajax 2 04.01.2015 19:10
Jquery (animate, slideUp, SlideDown) анимация меню не работает maksimum Помощь студентам 1 26.03.2014 10:13
Отработать повторно С# qwq C# (си шарп) 13 11.02.2013 11:02
Запрет запуска приложения повторно grim225 C# (си шарп) 2 02.01.2013 11:52
как повторно вызвать процедуру? iiunbreakableii Общие вопросы Delphi 8 24.06.2010 13:32