JavaScript(jQuery)에서 패럴렉스 이펙트
1. 스크롤 수치를 취득
어느 정도 스크롤할 수치를 취득한다. 이것만으로는 아직 패럴렉스도 아무것도 아니지만 모든 것은 여기에서 시작된다.
$(function() {
$(window).scroll(function() {
var value = $(this).scrollTop(); //스크롤 수치를 취득
$('#scrollValue').text(value);
});
});
스크롤을 하면 그 수치가 화면 우상단에 표시된다.
2. Position값을 변경하여 움직임을 붙인다.
취득한 스크롤 수치를 사용하여 사각형을 움직여본다.
$(function() {
var top = $('#item1').offset().top; //y좌표의 초기치를 취득
$(window).scroll(function() {
var value = $(this).scrollTop(); //스크롤치를 취득
$('#scrollValue').text(value);
//취득 스크롤치를 사각형의 Y좌표치에 지정
//스크롤치를 제산하여 이동거리에 변화를 준다
$('#item1').css('top', top + value / 2);
$('#item2').css('top', top + value / 4);
$('#item3').css('top', top + value / 6);
$('#item4').css('top', top + value / 8);
$('#item5').css('top', top + value / 10);
});
});
취득한 수치를 계산처리를 더해 사각형의 움직임에 변화를 붙인다.
3. 사각형을 옆으로 움직여 본다
top에 더헤 left의 수치를 변경해본다. 요령은 위의 샘플과 동일하다.
$(function() {
var top = $('#item1').offset().top; //y座標の初期値を取得
var left1 = $('#item1').offset().left; //item1のx座標の初期値
var left2 = $('#item2').offset().left; //item2のx座標の初期値
var left3 = $('#item3').offset().left; //item3のx座標の初期値
var left4 = $('#item4').offset().left; //item4のx座標の初期値
var left5 = $('#item5').offset().left; //item5のx座標の初期値
$(window).scroll(function() {
var value = $(this).scrollTop(); //スクロール値を取得
$('#scrollValue').text(value);
//取得したスクロール量を矩形のXY座標値に指定
//スクロール値を除算して移動距離に変化をつける
$('#item1').css({'top': top + value / 4});
$('#item2').css({'top': top + value / 5, 'left': left2 + value / 8});
$('#item3').css({'top': top + value / 6, 'left': left3 + value / 6});
$('#item4').css({'top': top + value / 8, 'left': left4 + value / 5});
$('#item5').css({'left': left5 + value / 4});
});
});
4. 배경화면을 움직여본다.
- 컨텐츠 영역의 배경화면을 스크롤으로 움직여본다.
$(function() {
var area2PosTop = $('#area2').offset().top;
var area3PosTop = $('#area3').offset().top;
var ashPosTop = $('#ashColorArea').offset().top;
$(window).scroll(function() {
var value = $(this).scrollTop(); //スクロール値を取得
$('#scrollValue').text(value);
// Area1
$('#area1').css('background-position-y', value);
// Area2
if (value > area2PosTop) {
$('#area2').css('background-position-y', value - area2PosTop);
console.log('area2 variable');
} else {
$('#area2').css('background-position-y', 'top');
console.log('area2 top');
}
// Area3
if (value > area3PosTop) {
$('#area3').css('background-position-y', (value - area3PosTop)*2);
console.log('area3 variable');
} else {
$('#area3').css('background-position-y', 'top');
console.log('area3 top');
}
// Area4
if (value > ashPosTop) {
var area4Top = value - ashPosTop - 800;
$('#area4').css('background-position-y', area4Top);
} else {
$('#area4').css('background-position-y', -200);
}
});
});
Area1과 Area2는, 화면의 가장 위까지 오면 거기에서 위치가 고정된다.
Area3은 가장 위까지 오면 이번에는 아래로 내려가는 움직임을 한다.
Area4는 화면 가장 위까지 위로부터가 아니라 도중에서 위치가 고정되어 거기에 Red color area가 통과하도록 움직인다.
5. Transform 시켜본다
스크롤에 의한 종횡의 움직임 뿐 아니라 CSS3의 Transform 프로퍼티도 조작해본다.
$(function() {
$(window).scroll(function() {
var value = $(this).scrollTop(); //スクロール値を取得
$('#scrollValue').text(value);
var hoge1 = value * 0.001 + 0.5;
if (hoge1 > 0.5) {
$('#area1').css('transform', 'scale(' + hoge1 + ')');
}
if (hoge1 > 0.1) {
$('#area2').css('transform', 'perspective(1000px) rotateY(' + value + 'deg)');
}
var hoge3 = 2 - value * 0.0009;
$('#area3').css('transform', 'scale(' + hoge3 + ') rotate(' + value + 'deg)');
var hoge4 = value * 0.0009;
if (hoge4 <= 1) {
$('#area4').css('opacity', hoge4);
}
});
});
Transform은 CSS3의 기능이므로 IE8 등의 옛날 브라우저에서는 동작하지 않지만 간단하게 화려한 움직임을 실현하는 것이 가능하다.
원문: http://dev.classmethod.jp/etc/html5-x-css3-x-jquery-6-parallax/
'jQuery' 카테고리의 다른 글
JQuery: find(), siblings() (0) | 2016.02.19 |
---|---|
JQuery: add(), andSelf(), contents(), end() (0) | 2016.02.19 |
JQuery: 셀렉터로 CSS 변경 (0) | 2016.02.17 |
CSS로 패럴렉스 이펙트 + jQuary 추가 (0) | 2016.02.05 |
패럴렉스 스크롤(Parallax scrolling)에 관하여 (0) | 2016.02.05 |