GSAP 3D parallax Demo
3D rotation based on mouse position of a series of square images to create a parallax effect
by Léo Durand
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.8.3/TweenMax.min.js"></script>
<div class="3D_container" id="red">
</div>
<div class="3D_container" id="blue">
</div>
<div class="3D_container" id="green">
</div>
SCSS
body {
overflow: hidden;
background-color:darkgray;
position: absolute;
top: 0;
left:0;
width: 100%;
height:100%;
-moz-transform: perspective(1000px);
-moz-transform-style: preserve-3d;
-webkit-perspective: 10000px;
}
.3D_container {
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
transform: translateZ(0px);
-moz-transform: translateZ(0px);
-webkit-transform: translateZ(0px);
}
#red {
left:10%;
top:10%;
height: 337px;
width: 300px;
background:red;
position: absolute;
}
#blue {
left:50%;
top:50%;
height: 337px;
width: 300px;
background:blue;
position: absolute;
}
#green {
left:50%;
top:10%;
height: 337px;
width: 300px;
background:green;
position: absolute;
}
JavaScript
$(document).ready(function() {
var request = null;
var mouse = { x: 0, y: 0 };
var cx = window.innerWidth / 2;
var cy = window.innerHeight / 2;
$('body').mousemove(function(event) {
mouse.x = event.pageX;
mouse.y = event.pageY;
cancelAnimationFrame(request);
request = requestAnimationFrame(update);
});
function update() {
dx = mouse.x - cx;
dy = mouse.y - cy;
tiltx = (dy / cy);
tilty = - (dx / cx);
radius = Math.sqrt(Math.pow(tiltx,2) + Math.pow(tilty,2));
degree = (radius * 20);
TweenLite.to(".3D_container", 1, {transform:'rotate3d(' + tiltx + ', ' + tilty + ', 0, ' + degree + 'deg)', ease:Power2.easeOut});
}
$(window).resize(function() {
cx = window.innerWidth / 2;
cy = window.innerHeight / 2;
});
});