Веб меняется каждый день. Одни технологии появляются, а другие исчезают. По этой причине веб-дизайнеры и фронтенд-разработчики должны следить за многими из последних тенденций веб-дизайна – параллакс прокрутка, фиксированные заголовки, плоский дизайн, лендинги и анимация – это некоторые из самых «горячих» новинок в сегодняшнем вебе.

 

В этой статье мы рассмотрим анимации и эффекты, основанные на CSS и jQuery, возникающие по мере прокрутки страницы. В этой демонстрации показано 4 эффекта, которые будут подробно рассмотрены в этой статье.

 

ps. Код, используемый в этой статье можно было улучшить с помощью кеширования и использования CSS анимации вместо метода jQuery — animate(), но для простоты, мы повторяли объявление объектов и все сохранили внутри jQuery.

 

 

Что такое анимация при прокрутке страницы?

Анимация при прокрутке страницы c эффектами- это новый метод, который дает фронтенд-разработчикам возможность создавать мультимедийные и интерактивные веб-проекты. Эффекты выполняются, когда пользователь прокручивает страницу вниз и они легко реализуемы с помощью CSS и jQuery.

 

Для того, чтобы обнаружить прокручивает ли пользователь страницу, мы используем событие jQuery scroll().

 

 

После того, как пользователь прокрутит страницу вниз, мы можем получить вертикальную позицию скрола окна с помощью метода jQuery scrollTop() и применить нужные эффекты:

 

$(window).scroll(function() {
    if ($(this).scrollTop() > 0) {
        // применяем эффекты и анимацию
    }
});

 

Применение в отзывчивом дизайне

Если нам надо создать эффекты в отзывчивом дизайне, мы должны использовать следующие свойства:

  1. width – ширина окна браузера
  2. height – высота окна

 

Без определения этих свойств, эффекты при прокрутке страницы могут работать не правильно, когда пользователь изменить размеры окна. Мы можем легко получить значения этих свойств, используя методы width() и height(). В следующем фрагменте кода показаны все необходимые проверки, которые мы должны принимать во внимание при создании скролл-эффектов:

 

$(window).scroll(function() {
    if ($(this).width() < 992) {
        if ($(this).height() <= 768) {
            if ($(this).scrollTop() < 500) {
                // применяем эффекты
            }
            if($(this).scrollTop() > 1000) {
            // применяем эффекты
            }
        }
    }
});

 

Пример 1

В этом примере эффект срабатывает, когда верхнее положение полосы прокрутки окна превышает 60px:

if ($(window).scrollTop() > 60) {
    $(".banner h2").css("display", "none");
    $(".banner .info").css("display", "block");
} else {
    $(".banner h2").css("display", "block");
    $(".banner .info").css("display", "none");
}

Этот код скрывает элемент h2 и показывается элемент .info, который был до этого скрыт. Этот код также можно записать следующим образом:

if ($(window).scrollTop() > 60) {
    $(".banner h2").hide();
    $(".banner .info").show();
} else {
    $(".banner h2").show();
    $(".banner .info").hide();                               
}

Этот эффект в действии смотрите тут или ниже:

 

Пример 2

Следующий эффект зависит от верхней позиции скроллбара браузера и от ширины окна. Cделаем следующие ограничения:

  1. Cвойство width имеет значение меньше или равное 549px. В этом случае, анимация срабатывает только тогда, когда верхнее положение скролбара превышает 600px.
  2. Cвойство width имеет значение между 550px и 991px. В этом случае, анимация срабатывает только тогда, когда верхнее положение скролбара превышает 480 пикселей.
  3. Cвойство width имеет значение больше, чем 991px.

 

В этом случае, анимация срабатывает только тогда, когда верхнее положение скролбара превышает 450px. Используем это все в следующем коде:

if ($(window).width() <= 549) {
    if($(window).scrollTop() > 600) {
        // анимация
        firstAnimation();
    }
} else if ($(window).width() > 549 && $(window).width() <= 991) {
    if($(window).scrollTop() > 480){
        // анимация
        firstAnimation();
    }
} else {
    if ($(window).scrollTop() > 450) {
        // анимация, которая должна быть выполнена
        firstAnimation();
    }
}

Код, который содержит анимацию:

var firstAnimation = function () {
    $(".clients .clients-info").each(
        function () {
            $(this).delay(500).animate({
                opacity: 1,
                height: "180",
                width: "250"
            }, 2000);
        }
    );
};

Вышеприведенный код анимирует свойства opacity, height и width. Эффекты в работе смотрите тут.

Пример 3

Эффект зависит от верхней позиции полосы прокрутки окна и от ширины окна. Cделаем следующие ограничения:

  1. Cвойство width имеет значение меньше или равное 549px. В этом случае, анимация срабатывает только тогда, когда верхнее расположение скролбара превышает 1750px.
  2. Cвойство width имеет значение между 550px и 991px. В этом случае, анимация срабатывает только тогда, когда верхнее расположение скролбара превышает 1150px.
  3. Cвойство width имеет значение больше, чем 991px. В этом случае, анимация срабатывает только тогда, когда верхнее расположение скролбара превышает 850px.

 

Используем это все в следующем коде:

 

if ($(window).width() <= 549){
    if($(window).scrollTop() > 1750){
        secondAnimation();
    }
} else if ($(window).width() > 549 && $(window).width() <= 991) {
    if ($(window).scrollTop() > 1150) {
        secondAnimation();
    }  
} else {
    if ($(window).scrollTop() > 850) {
        secondAnimation();
    }
}

 

Код с анимацией:

var secondAnimation = function() {          
    $(".method:eq(0)").delay(1000).animate({
                opacity: 1
            }, "slow", 
            function() {
                $(this).find("h4").css("background-color", "#b5c3d5");
        }
    );
 
    $(".method:eq(1)").delay(2000).animate({
                opacity: 1
            }, "slow", 
            function() {
                $(this).find("h4").css("background-color", "#b5c3d5");
        }
    );
 
    $(".method:eq(2)").delay(3000).animate({
                opacity: 1
            }, "slow", 
            function() {
                $(this).find("h4").css("background-color", "#b5c3d5");
        }
    );
 
    $(".method:eq(3)").delay(4000).animate({
                opacity: 1
            }, "slow", 
            function() {
                $(this).find("h4").css("background-color", "#b5c3d5");
        }
    );
};

Вышеприведенный код анимирует свойства opacity и затем изменяет свойство background-color элементов h4.

Эффекты в работе смотрите в этой демонстрации.

Пример 4

Этот эффект зависит не только от верхней позиции полосы прокрутки окна, но и от ширины окна. Более детально:

  1. Если значение ширины окна width меньше или равно 549px, анимация срабатывает только тогда, когда верхнее положение полосы прокрутки окна превышает 3500px.
  2. Если значение ширины окна width находится между 550px и 991px, анимация срабатывает только тогда, когда верхнее положение полосы прокрутки окна превышает 2200px.
  3. Если значение ширины окна width имеет значение большее, чем 991px, анимация срабатывает только тогда, когда верхнее положение полосы прокрутки окна превышает 1600px.
if ($(window).width() <= 549) {
    if ($(window).scrollTop() > 3500) {
        thirdAnimation();
    }
} else if ($(window).width() > 549 && $(window).width() <= 991) {
    if ($(window).scrollTop() > 2200) {
        thirdAnimation();
    }
} else {
    if ($(window).scrollTop() > 1600) {
        thirdAnimation();
    }
}

Код для анимации:

var thirdAnimation = function() {
    $(".blogs").find("p").delay(1400).animate({
            opacity: 1, 
            left: 0
        }, "slow"
    );
 
    $(".blogs").find("img").delay(2000).animate({
            opacity: 1, 
            right: 0
        }, "slow"
    );
 
    $(".blogs").find("button").delay(2500).animate({
            opacity: 1, 
            bottom: 0
        }, "slow"
    );
};

 

Вышеприведенный код анимирует свойства opacity, left, right и bottom элементов p, img и button.

Демо смотрите тут (в отдельном окне)

 

Заключение

Уверен, что 4 примеров достаточно, чтобы показать как можно использовать jQuery для создания эффектов по мере прокрутки страницы.

 

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

comments powered by HyperComments
Понравился материал - нажмите, пожалуйста, на кнопку
=)
Алексей
2014-09-08 09:54:12
Скролл-эффекты и их разновидности - http://html5.by/blog/scroll-effects/