Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.07.2017, 18:50
Новичок на форуме
Отправить личное сообщение для PavelRem Посмотреть профиль Найти все сообщения от PavelRem
 
Регистрация: 12.07.2017
Сообщений: 6

Прилипающее меню
Меню располагается на высоте 200px от начала страницы. Нужно сделать так, чтоб меню прилипало к вершине страницы, когда страница проскролится ниже отметки в 200px. И само собой, откреплялось если скролить в обратную сторону.
Набросал функцию:
$(function(){
    $(window).scroll(function() {
        if($(this).scrollTop() >= 200) {
            $('.navbar').addClass('navbar-fixed-top');
            $('body').css("padding-top", "70px");
        }
        else{
            $('.navbar').removeClass('navbar-fixed-top');
            $('body').css("padding-top", "0px");
        }
    });
});

Все работает, но есть проблема - функция выполняется ПОСТОЯННО при событии скрола.
Как это сделать правильно? Подскажите пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 12.07.2017, 19:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от PavelRem
функция выполняется ПОСТОЯННО
от этого не избавится, но можно сделать триггер и вносить изменения только в момент пересечения scrollTop() >= 200, второй вариант реагировать с задержкой.
debounce
Ответить с цитированием
  #3 (permalink)  
Старый 12.07.2017, 21:03
Новичок на форуме
Отправить личное сообщение для PavelRem Посмотреть профиль Найти все сообщения от PavelRem
 
Регистрация: 12.07.2017
Сообщений: 6

Сообщение от рони Посмотреть сообщение
можно сделать триггер и вносить изменения только в момент пересечения
debounce
Как ловить момент пересечения?
Ответить с цитированием
  #4 (permalink)  
Старый 12.07.2017, 21:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

фиксация меню
PavelRem,
проверьте
$(function(){
    var flag = true;
    $(window).scroll(function() {
        if($(this).scrollTop() >= 200 && flag) {
            $('.navbar').addClass('navbar-fixed-top');
            $('body').css("padding-top", "70px");
            flag = !flag;
        }
        else if($(this).scrollTop() < 200 && !flag){
            flag = !flag;
            $('.navbar').removeClass('navbar-fixed-top');
            $('body').css("padding-top", "0px");
        }
    }).trigger("scroll");
 });

Последний раз редактировалось рони, 12.07.2017 в 22:02.
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2020, 16:26
Кандидат Javascript-наук
Отправить личное сообщение для StartGames Посмотреть профиль Найти все сообщения от StartGames
 
Регистрация: 13.06.2014
Сообщений: 133

спасибо, работает
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена стилей класса Павел Турченко Элементы интерфейса 9 30.10.2015 15:24
Бесконечноуровневое меню на CSS ruslan_mart Ваши сайты и скрипты 5 12.01.2015 20:59
Текуший пункт меню и разные родители Kiano Элементы интерфейса 17 08.01.2015 07:59
Выделение активных пунктов многоуровневого меню на jQuery Letto Элементы интерфейса 2 04.12.2013 15:30
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36