2013-10-04 3 views
0

У меня есть контейнер, содержащий верхнее меню. Но когда этот контейнер прокручивается на ширину 60 пикселей, мне нужен класс, который нужно добавить в верхнее меню, но он этого не делает.Добавить класс в элемент, когда элемент прокручивается над

Я это Jquery:

$(window).scroll(function() { 
    if ($('#case-container').scrollTop()>60) { 
     $('.case-header').addClass('sticky') 
    } else if ($('#case-container').scrollTop()<60) { 
     $('.case-header').removeClass('sticky') 
    } 
}); 

Как я могу это исправить, чтобы заставить его работать?

+0

Что не работает? Добавление класса или прокрутки? И можете ли вы опубликовать html? –

+0

Можете ли вы предоставить демо-версию по адресу http://jsfiddle.net, чтобы мы могли видеть, что происходит не так? Кстати, если вы не хотите ничего делать, когда '.scrollTop()' ровно 60, вы можете просто использовать простой 'else {...' случай, вам не нужно 'else if' с условием, которое является напротив начального условия 'if'. – nnnnnn

+0

[Может быть полезно] (http://heera.it/jquery-sticky-menu-plugin), похоже, вам нужна подобная вещь. –

ответ

1

Элементы scrollTop не изменяются, только прокручиваемый элемент изменит scrollTop.

Обратите внимание, что для установки scrollTop, некоторые браузеры используют тело, другой HTML, поэтому обычное исправление, чтобы проверить, как например, так $('body, html').scrollTop(100), но для получения, окна (или в данном контексте this) должно работать:

$(window).scroll(function() { 
    if ($(window).scrollTop()>60) { 
     $('.case-header').addClass('sticky') 
    } else if ($(window).scrollTop()<60) { 
     $('.case-header').removeClass('sticky') 
    } 
}); 

Как Замечание, вы могли бы сократить его

$(window).on('scroll', function() { 
    $('.case-header').toggleClass('sticky', $(this).scrollTop() > 60); 
}); 
+0

+1, но я бы предпочел '$ ('. Case-header.sticky'). RemoveClass ('sticky');' или '$ ('. Case-header.sticky'). ToggleClass ('sticky', $ (this) .scrollTop()> 60); 'но не обязательно. –

+0

Спасибо! Но теперь он прилипает, когда верх окна прокручивается вниз, я хочу, чтобы он склеивался, когда # case-контейнер прокручивается вниз, вместо окна – Kim

+0

@Kim - но в # case-контейнере даже есть полоса прокрутки, элемент, прокручиваемый в обработчик события, очевидно, является окном, так как вы можете прокручивать только один элемент без прокрутки окна? – adeneo

Смежные вопросы