Efekt parallax
W tutorialu pokażę jak zrobić popularny ostatnio na stronach www efekt parallax.
To końcowy efekt jaki uzyskamy.
Najpierw należy przygotować odpowiednie obrazki, które będą warstwami w paralaksie. Można
przygotować dowolną ilość takich warstw. Ja przygotowałam cztery obrazki: trzy balony i część chmur.
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Efekt Parallax demo</title> <link rel="stylesheet" type="text/css" href="styl.css"> </head> <body class="parallax"> <img class="parallax-img" src="balon3.png" alt="" data-vel_x="-0.005" data-vel_y="0.011" data-offset_x="780" data-offset_y="530"> <img class="parallax-img" src="balon2.png" alt="" data-vel_x="0.005" data-vel_y="0.011" data-offset_x="450" data-offset_y="370"> <img class="parallax-img" src="balon1.png" alt="" data-vel_x="0.01" data-vel_y="0.04" data-offset_x="570" data-offset_y="430"> <div class="parallax-img clouds" alt="" data-vel_x="0.052" data-vel_y="0.002" data-offset_x="-500" data-offset_y=""> </div> <div id="main-wrapper"> <h1>Efekt Parallax tutorial</h1> </div> <script type="text/javascript" src="jquery-1.11.2.js"></script> <script type="text/javascript" src="main.js"></script> </body> </html>Wszystkie elementy, które mają się poruszać posiadają klasę parallax-img. Ponadto mają dodatkowe parametry określające prędkość i przesunięcie. Poniżej zawartość pliku css.
@import url(http://fonts.googleapis.com/css?family=Khula);
body {
font-size: 15px;
margin: 0;
padding: 0;
background: url("bg1.jpg") no-repeat fixed left top rgba(0, 0, 0, 0);
}
.parallax {
width: 100%;
height: 100%;
position: relative;
}
#parallax-cfg {
display: none;
}
#main-wrapper {
display:block;
width: 460px;
margin: 0 auto;
}
#main-wrapper h1 {
width: 100%;
text-align: center;
display: block;
font-size: 3.4em;
font-family: 'Khula';
color:#cfeef8;
text-shadow: 2px 2px 0px #011532;
filter: dropshadow(color=#011532, offx=1, offy=1);
}
.parallax-img {
position: fixed;
}
.clouds {
background: url('clouds.png') top left repeat-x;
width: 300%;
height: 266px;
z-index: -1;
}
Zawartość pliku main.js jest następująca.
$('.clouds').attr('data-offset_y', $(window).height());
var default_x = $(document).width()/2 - $('#main-wrapper').width();
var default_y = 50;
$('.parallax-img').each(function () {
var offset_x = $(this).data('offset_x');
var offset_y = $(this).data('offset_y');
$(this).css({"left": default_x+offset_x});
$(this).css({"top": default_y+offset_y});
});
var scroll_y = $('body').scrollTop();
$(window).mousemove(function(event) {
move(event);
});
$(window).scroll(function(event) {
move(event);
});
$(window).resize(function(event) {
default_x = $(document).width()/2 - $('#main-wrapper').width();
move(event);
});
function move(event) {
var cursor_x = event.pageX;
var cursor_y = event.pageY;
$('.parallax-img').each(function () {
var vel_x = $(this).data('vel_x');
var vel_y = $(this).data('vel_y');
var offset_x = $(this).data('offset_x');
var offset_y = $(this).data('offset_y');
var new_x = -cursor_x*vel_x + default_x+offset_x;
var new_y = -cursor_y*vel_y + default_y+offset_y;
$(this).css({"left": new_x});
$(this).css({"top": new_y});
});
}
Najpierw ustalamy pozycję chmur oraz domyślnie położenie elementów (default_x i default_y).
Następnie przechodzimy przez wszystkie elementy o klasie parallax-img i ustawiamy ich pozycję na podstawie
domyślnego położenia i przesunięcia (offset). Za całą "magię" odpowiada funkcja move odpowiedzialna za
poruszanie elementami w zależności od położenia kursora myszy.
