chevron-left chevron-right

Piotr Nalepa Frontend, architektura i AI

[JS] Jak zrobić efekt poruszającego się tła – czyli kilka słów o efekcie parallax

Ta wersja
blog.piotrnalepa.pl/2014/07/18/js-jak-zrobic-efekt-poruszajacego-sie-tla-czyli-kilka-slow-o-efekcie-parallax
Opublikowano
Autor
, Staff Software Engineer
Kategoria
JavaScript
Uwagi
Napisz do mnie · Napisz na X

Ten wpis ma 12 lat. Od tego czasu przeglądarki i narzędzia mogły się zmienić, więc zanim użyjesz kodu, sprawdź go z aktualną dokumentacją.

Ostatnio za pomocą systemu wiadomości na fanpage'u bloga, na Facebooku, skontaktował się ze mną jeden z czytelników i poprosił mnie o wyjaśnienie zasady działania efektu jaki osiągnięto na jednej ze stron. Postanowiłem przyjrzeć się temu zagadnieniu i okazało się, że zastosowano tam efekt parallax, znany już od dłuższego czasu.

Sekcja 1Czym jest efekt parallax?

Efekt parallax polega na przesuwaniu się kilku nakładających się warstw z obrazkami z różną prędkością podczas ruchu kursora, tj. obrazki w dolnych warstwach przemieszczają się wolniej niż obrazki w górnych warstwach. Takie podejście ma imitować efekt 3D, podobny do efektu który widać na niektórych telewizorach wyposażonych w funkcję 3D. Należy dodać, że każda warstwa zawiera jakąś treść, przeważnie półprzezroczysty obrazek lub obrazek z przezroczystym tłem.

Efekt parallax - warstwy

Na powyższym obrazku została przedstawiona prosta grafika, która składa się z czterech warstw. Daleko w tle jest niebieskie niebo. Na warstwie wyżej znajduje się słońce. Na kolejnej, umieściłem domek, a na najwyższej jest coś co robi za pagórek z łąką.

Sekcja 2Implementacja efektu parallax przy pomocy pluginu jQuery - jQuery.parallax

Po wstępnych oględzinach strony, o której wspomniał czytelnik, dotarłem do informacji, że wykorzystano plugin jQuery.parallax, dzięki temu osiągnięto tamten całkiem ciekawy efekt.

Aby osiągnąć wyżej wymieniony efekt, należy przygotować następującą strukturę kodu HTML:

Przykład 1HTML
1
2
3
4
5
6
<div class="parallax-viewport">
  <div class="parallax-layer"><img src="bg-1.png" alt="Tło" width="640" height="360" /></div>
  <div class="parallax-layer"><img src="bg-2.png" alt="Słońce" width="640" height="360" /></div>
  <div class="parallax-layer"><img src="bg-3.png" alt="Domek" width="640" height="360" /></div>
  <div class="parallax-layer"><img src="bg-4.png" alt="Wzgórze" width="640" height="360" /></div>
</div>

Następnie, należy dodać style CSS, które określą ramy w których efekt będzie osiągalny:

Przykład 2CSS
1
2
3
4
5
6
7
8
9
.parallax-viewport { 
  position: relative; 
  overflow: hidden; 
  width: 640px; 
  height: 360px; 
}
.parallax-layer { 
  position: absolute; 
}

Jak widać, póki co nic szczególnego. Określiliśmy rozmiar obszaru z efektem parallax oraz nadaliśmy warstwom z poszczególnymi obrazkami pozycjonowanie absolutne względem rodzica. Mając tak przygotowany kod możemy podpiąć plugin jQuery.parallax do naszego kodu HTML za pomocą następującego kawałka kodu Javascript:

Przykład 3JavaScript
1
2
3
(function ($) {
  $('.parallax-layer').parallax({}, {}, {xparallax: '200px'});
})(jQuery);

I to jest caly kod, który podpina plugin jQuery do naszego kodu HTML. Muszę wspomnieć, że pierwszym parametrem funkcji $().parallax(); jest obiekt z ustawieniami pluginu, a kolejne parametry odnoszą się już bezpośrednio do każdej warstwy z osobna. Polecam zajrzeć do dokumentacji pluginu.
Efekt na stronie z Transformers został usprawniony o wykorzystanie animacji wspomaganych sprzętowo, czego w demie pluginu nie ma. Dzięki temu animacja jest płynniejsza i nie zacina się w przeglądarkach (wykorzystano własności: transform: translate3d(0, 0, 0) oraz transform-style: preserve-3d; - przemieszczenia są wyliczane na bieżąco i ich wartości są umieszczane we własności transform: translate3d();).

Sekcja 3Podsumowanie

Od jakiegoś czasu nie mam już zwyczaju opisywać pluginów jQuery do osiągania zamierzonych efektów, ale na prośbę czytelnika postarałem się nieco przybliżyć tematykę związaną z danym efektem i mam nadzieję, że udało mi się to wyjaśnić wystarczająco.

Efekt parallax jest bardzo ciekawym wizualnie efektem, ale jego największą siłą są dobrze spasowane zdjęcia, które można wstawić jako tło do warstw które mają się przemieszczać.

Zdjęcie tytułowe pochodzi ze strony: http://www.transformersfilm.pl

Udostępnij
Uwagi

O autorze

Staff Software Engineer

Piszę na tym blogu od 2009 roku, a strony i aplikacje webowe tworzę zawodowo od 14 lat. Obecnie w Bishop Fox prowadzę frontend platformy Cosmos, od samego początku projektu. Wcześniej pracowałem m.in. w OLX, KUDO, Auto1 i eZ Systems. Piszę tu o tym, czego nauczyłem się w praktyce: o JavaScripcie, TypeScripcie, Reakcie, CSS-ie i architekturze frontendu. Występowałem też jako prelegent na konferencjach w Polsce i Europie. Masz pytanie albo pomysł na wpis? Daj znać!