Advertisement
  1. Web Design
  2. jQuery

Небольшое руководство: анимации прокрутки с использованием fullPage.js и Animate.css

Scroll to top
Read Time: 4 min

() translation by (you can also view the original English article)

В предыдущем руководстве я рассказал вам про fullPage.js, популярный плагин для jQuery по созданию полноэкранных страниц. В этом руководстве я покажу вам, как создать анимацию при скролле, используя fullPage.js и animate.css.

Нужные библиотеки

Для нашего урока я создал демо страницу. Если взгляните в меню Settings, вы увидите, какие библиотеки я включил:

filefilefile

Bootstrap не обязателен; я его включил только из-за преимуществ его стилей.

Процесс

На нашей странице будет четыре секции; каждая на весь размер viewport (благодаря fullPage). Пользователь будет перемещаться между секциями скроллом, либо же точками с правой стороны экрана. На каждый такой скролл мы настроим анимации, такие, например, как появление изображения.

filefilefile

Перед тем, как приступить к коду, который запустит анимации, сперва разберемся с основными шагами:

  • Получим преимущество обратных функций, которые есть у fullPage. Именно в нашем случае мы хотим анимировать вторую, третью и четвертую секции, так что мы воспользуемся обратной функцией onLeave. Если нам нужно анимировать и первую секцию, то можно использовать обратную функцию afterLoad. Также для анимации слайдов можно использовать функции afterSlideLoad и onSlideLeave.
  • Добавим динамичных анимаций из библиотеки animate.css, используя jQuery.
  • Также заанимируем элементы последовательно, используя свойство CSS animate-delay.

Теперь займемся анимациями!

Анимация #1

Вторая секция страницы включает три изображения и одну кнопку. Вот структура:

1
      <section class="section second">
2
          <div class="container">
3
              <div class="row">
4
                  <div class="col-sm-4 is-animated">
5
                      <img class="img-responsive" src="https://placeimg.com/300/350/nature">
6
                  </div>
7
                  <div class="col-sm-4 is-animated">
8
                      <img class="img-responsive" src="https://placeimg.com/300/350/people">
9
                  </div>
10
                  <div class="col-sm-4 is-animated">
11
                      <img class="img-responsive" src="https://placeimg.com/300/350/tech">
12
                  </div>
13
                  <div class="col-xs-12 text-center is-animated__single">
14
                      <button type="button" class="btn btn-lg">A Simple Button</button>
15
                  </div>
16
              </div><!--end of row-->
17
          </div><!--end of container-->
18
      </section>

Заметьте, что мы добавили классы is-animated и is-animated__single элементам, которые мы хотим анимировать. Также не забываем, что элементы с is-animated получат одинаковый эффект анимации (например, fadeInUpBig)

Код jQuery, который запускает анимации для секций выглядит так:

1
      var $isAnimatedSecond = $('.second .is-animated'),
2
          $isAnimatedSecondSingle = $('.second .is-animated__single');
3
4
      /* this code is part of the onLeave callback */    
5
      if( index == 1 && nextIndex == 2 ) {
6
          $isAnimatedSecond.addClass('animated fadeInUpBig'); 
7
          $isAnimatedSecond.eq(0).css('animation-delay', '.3s');
8
          $isAnimatedSecond.eq(1).css('animation-delay', '.6s');
9
          $isAnimatedSecond.eq(2).css('animation-delay', '.9s');
10
          $isAnimatedSecondSingle.addClass('animated rollIn').css('animation-delay', '1.7s');
11
      }

В этом примере, когда исчезает первая секция и появляется вторая, мы применяем две разные анимации (например, fadeInUpBig и rollIn) к нужным элементам. Дополнительно используем свойство CSS animation-delay, чтобы задать, когда эти анимации будут стартовать.

Анимация #2

Третья секция содержит два изображения и одну кнопку. Ниже вы можете посмотреть на соответствующий HTML код.

1
      <section class="section third">
2
        <div class="container">
3
      		<div class="row">
4
      			<div class="col-sm-3 col-sm-offset-3 is-animated">
5
      				<img class="img-responsive" src="https://placeimg.com/300/350/tech">
6
      			</div>
7
      			<div class="col-sm-3 is-animated">
8
      				<img class="img-responsive" src="https://placeimg.com/300/350/any">
9
      			</div>
10
      			<div class="col-xs-12 text-center is-animated__single">
11
      				<button type="button" class="btn btn-lg">A Simple Button</button>
12
      			</div>
13
      		</div><!--end of row-->
14
      	</div><!--end of container-->
15
      </section>

Как и с предыдущим примером, добавляем is-animated и is-animated__single к нужным элементам.

Код jQuery выглядит следующим образом:

1
        var $isAnimatedThird = $('.third .is-animated'),
2
            $isAnimatedThirdSingle = $('.third .is-animated__single');
3
4
        /* this code is part of the onLeave callback */
5
        if( ( index == 1 || index == 2) && nextIndex == 3 ) {
6
            $isAnimatedThird.eq(0).addClass('animated fadeInRightBig').css('animation-delay', '.3s'); 
7
            $isAnimatedThird.eq(1).addClass('animated fadeInLeftBig').css('animation-delay', '.6s');
8
            $isAnimatedThirdSingle.addClass('animated bounceInDown').css('animation-delay', '1.2s');
9
        }

В этой секции используем анимации fadeInRightBig и fadeInLeftBig для последовательного показа изображений. Затем покажем кнопки, используя анимацию bounceInDown.

Анимация #3

Четвертая секция состоит из трех элементов: два абзаца и одна кнопка. Структура:

1
      <section class="section fourth">
2
      	<div class="container">
3
      		<div class="row">
4
      			<div class="col-xs-12 is-animated">
5
      				<p>Some text here</p>
6
      			</div>
7
      			<div class="col-xs-12 is-animated">
8
      				<p>Some text here</p>
9
      			</div>
10
      			<div class="col-xs-12 text-center is-animated__single">
11
                	<button type="button" class="btn btn-lg">Thank You!</button>
12
        		</div>
13
      		</div><!--end of row-->
14
      	</div><!--end of container-->
15
      </section>

Вновь, is-animated и is-animated__single нужным элементам.

Затем соответствующий код jQuery:

1
      var $isAnimatedFourth = $('.fourth .is-animated'),
2
          $isAnimatedFourthSingle = $('.fourth .is-animated__single');
3
4
      /* this code is part of the onLeave callback */
5
      if( ( index == 1 || index == 2 || index == 3 ) && nextIndex == 4 ) {
6
          $isAnimatedFourth.addClass('animated zoomIn').css('animation-delay', '.6s');
7
          $isAnimatedFourthSingle.addClass('animated lightSpeedIn').css('animation-delay', '1.2s')
8
          $isAnimatedFourthSingle.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
9
          $(this).removeClass('lightSpeedIn').addClass('zoomOutDown');
10
          });
11
      }

Здесь оба абзаца появятся одновременно с использованием анимации zoomIn. А кнопка появится с использованием анимации lightSpeedIn.

Более того, следующий код поможет нам определять, когда анимация закончится:

1
      $('#yourElement').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', doSomething);

В нашем примере мы покажем кнопку всего на несколько секунд, а затем воспользуемся вышеупомянутым кодом, чтобы ее спрятать.

Ниже вы можете взглянуть на прикрепленное демо с CodePen (но через full page demo куда эффективней):

Заключение

В этом кратком руководстве мы узнали, как можно совместить fullpage.js и animate.css, чтобы создать анимации на основе скролла.

Если вы хотите улучшить это демо, вот что вы можете попробовать сделать:

  • Включить анимации только для широких экранов. Для этого используйте matchMedia метод.
  • Сделайте код внутри onLeave более легкодоступным к повторному использованию.
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.