Мы использовали метод, который включает изменения состояния класса, и конечно может быть настроен по вашему вкусу. Важно понимать что переход от класса А к классу В делает что-то (используя переходы) и переход от А до С может не дать нужного эффекта.Таким образом, порядок очень важен в этом примере.

 
 

В этом демо мы используем замечательный плагин Jquery Waypoints

Меню состоит из различных частей, это нужно чтобы достичь эффекта 3d вращения:

<header id="ha-header" class="ha-header ha-header-large">
    <div class="ha-header-perspective">
        <div class="ha-header-front">
            <h1><span>Header Effects</span></h1>
            <nav>
                <a>‹ Previous Demo</a>
                <a>Something</a>
                <a>Anything</a>
                <a>Back to the article</a>
            </nav>
        </div>
        <div class="ha-header-bottom">
            <nav>
                <a>Dalliance</a>
                <a>Inglenook</a>
                <a>Lagniappe</a>
                <a>Mellifluous</a>
                <a>Erstwhile</a>
                <a>Wafture</a>
                <a>Serendipity</a>
                <a>Love</a>
            </nav>
        </div>
    </div>
</header>

Добавим специальный класс для секций которые будут вызывать изменения класса:

<section class="ha-waypoint" data-animate-down="ha-header-small" data-animate-up="ha-header-large">
    <!-- ... -->
</section>

Дата-атрибуты используются для установки правильных классов в зависимости направления в котором мы прокручиваем сайт.

.ha-header-rotate {
    height: 220px;
    top: 50px;
    padding-left: 50px;
    padding-right: 50px;
}
 
.ha-header-rotate .ha-header-front {
    transform: translateY(-100%) rotateX(90deg);
}
 
.ha-header-rotate .ha-header-bottom {
    top: 50%;
    transition: transform 0.5s;
    transform: rotateX(0deg) translateY(-100%);
}

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

С помощью Waypoints (ссылка на его загрузку вверху поста) мы просто добавляем соответствующий класс:

var $head = $( '#ha-header' );
$( '.ha-waypoint' ).each( function(i) {
    var $el = $( this ),
        animClassDown = $el.data( 'animateDown' ),
        animClassUp = $el.data( 'animateUp' );
 
    $el.waypoint( function( direction ) {
        if( direction === 'down' && animClassDown ) {
            $head.attr('class', 'ha-header ' + animClassDown);
        }
        else if( direction === 'up' && animClassUp ){
            $head.attr('class', 'ha-header ' + animClassUp);
        }
    }, { offset: '100%' } );
} );

Фиксированное меню сейчас очень популярно, надеюсь эта статья помогла вам и вдохновила на создание своего.

Яндекс.Метрика