Скрыть навигацию при прокрутке вниз

Мне нужно меню навигации, которое скрывается, когда пользователь прокручивает вниз или останавливается (за исключением верхней части, тогда оно должно быть видно), как только пользователь начинает прокручивать вверх, меню должно появиться снова.

Уже:

HTML:

<div id="wrapper">

    <div id="header_nav">
        <ul>
            <li>Punkt1</li>
            <li>Punkt2</li>
            <li>Punkt3</li>
            <li>Punkt4</li>
        </ul>
    </div>

</div>

CSS:

* {
    padding:0px; 
    margin:0px;
}
#wrapper {
    height:1200px; 
    width:960px;
    background-color:#567; 
    margin:auto;
}
#header_nav {
    position:fixed; 
    width:960px;
    height:auto;
    background-color:#678;
}

JQUERY:

$(function(){
    $('#header_nav').data('size','big');
});

$(window).scroll(function(){
    if($('body').scrollTop() > 0)
    {
        if($('#header_nav').data('size') == 'big')
        {
            $('#header_nav').data('size','small');
            $('#header_nav').stop().animate({
                height:'40px'
            },600);
        }
    }
    else
    {
        if($('#header_nav').data('size') == 'small')
        {
            $('#header_nav').data('size','big');
            $('#header_nav').stop().animate({
                height:'100px'
            },600);
        }  
    }
});

Когда я прокручиваю, ничего не происходит, моя навигация остается неизменной все время. Я хочу, чтобы он скрывался, когда я прокручиваю вниз и делаю паузу, но как только я начинаю прокручивать вверх, я хочу, чтобы он исчезал. Но я не могу заставить его работать, не могли бы вы, ребята, сказать мне, что я делаю неправильно?

Также сделал здесь скрипку: http://jsfiddle.net/iBertel/GGRUL/


person Bertel    schedule 04.10.2012    source источник
comment
Когда вы говорите, что я не могу заставить его работать, что вы имеете в виду? Какой текущий симптом? Где ты застрял?   -  person HaemEternal    schedule 04.10.2012
comment
Когда я прокручиваю, ничего не происходит, моя навигация остается неизменной все время... Я хочу, чтобы она скрывалась, когда я прокручиваю вниз и делаю паузу, но как только я начинаю прокручивать вверх, я хочу, чтобы она исчезала.   -  person Bertel    schedule 04.10.2012
comment
Никто не знает, как помочь мне решить эту проблему? а может это не возможно?   -  person Bertel    schedule 05.10.2012
comment
Ваш JSFiddle неверен; вы используете MooTools вместо jQuery. (Обновленный JSFiddle: jsfiddle.net/GGRUL/13)   -  person MassivePenguin    schedule 05.10.2012
comment
Тем не менее, на моем экране ничего не происходит, когда я прокручиваю - это работает на вашем экране?   -  person Bertel    schedule 05.10.2012
comment
Да, у меня отлично работает... Я использую Chrome в Windows 7.   -  person MassivePenguin    schedule 05.10.2012


Ответы (2)


Изменение $('body').scrollTop на $(window).scrollTop, похоже, работает:

Пример

Протестировано в Chrome, Firefox, IE9, Opera в Windows (все последние версии, насколько мне известно).

РЕДАКТИРОВАТЬ:

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

http://jsfiddle.net/GbXG4/4/

person MassivePenguin    schedule 05.10.2012
comment
Да, но мне нужно прокрутить до самого верха, прежде чем он снова отобразится - мне нужно, чтобы он отображался, как только я начну пролистывать вверх... Есть идеи, как это исправить? Это последняя версия: jsfiddle.net/iBertel/4uqNL. - person Bertel; 11.10.2012
comment
Обновленный ответ с новым кодом на основе этого: заголовок stackoverflow.com/questions/4326845/ - person MassivePenguin; 11.10.2012
comment
Очень извиняюсь, не правильно сформулировал. Мне нужно, чтобы мое меню скрывалось, когда я прокручиваю вниз - и когда я прокручиваю вверх, оно должно снова становиться видимым - оно НЕ должно быть видно только тогда, когда я прокручиваю до конца, но как только я начинаю прокручивать вверх. Вы думаете вы можете исправить это? - person Bertel; 11.10.2012
comment
вау - ты мой герой - большое спасибо! И последнее - можно ли скрыть это, если окно останавливается, кроме как вверху? Например, когда вы прокручиваете вниз, он скрывается, затем, возможно, прокручивается немного вверх, а затем он становится видимым, тогда мне нужно снова скрыть, если я не прокручиваю весь путь вверх... - person Bertel; 11.10.2012
comment
Ага. Выделите функции из события window.scroll и используйте setTimeout и clearTimeout: jsfiddle.net/37srY - person MassivePenguin; 11.10.2012
comment
Argh - когда вы тестируете, вы обнаруживаете! И последнее - обещаю... Мне нужно, чтобы оно оставалось при наведении курсора мыши. Например, если вы прокручиваете вверх и появляется меню, затем вы берете мышь, и оно не должно исчезать, пока вы снова не уберете мышь или не прокрутите вниз... Возможно ли это? - person Bertel; 11.10.2012

Хм, твой пример работает. Я изменил библиотеку (левая панель) на jQuery и все. Кроме того, добавьте overflow:hidden; к вашему #header_nav. Это скроет текст, который не соответствует небольшой высоте

person dan_fides    schedule 05.10.2012