3D Multi-layer Parallax Effect With jQuery And CSS3
| File Size: | 1.76 KB |
|---|---|
| Views Total: | 4935 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
A 3D interactive multi-layer parallax animation effect that reacts to mouse movement, built using jQuery and CSS3.
How to use it:
1. Create a group of DIV layers in a container element.
<div class="box"> <span class="layer"></span> <span class="layer"></span> <span class="layer"></span> <span class="layer"></span> <span class="layer"></span> <span class="layer"></span> <span class="layer"></span> <span class="layer"></span> </div>
2. The CSS styles for the layers.
.box {
position: relative;
height: 100%;
top: 50%;
left: 50%;
perspective: 9999px;
transform-style: preserve-3d;
transform: translate(-50%, -50%) rotateX(10deg);
transition: 2s cubic-bezier(0.2, 0.9, 0.3, 1.3);/* Layers */
}
.box .layer {
position: absolute;
top: 50%;
left: 50%;
background: #FFFFFF;
box-shadow: -4px -4px 10px 0px rgba(0, 0, 0, 0.4);
animation: load 1.4s forwards;
opacity: 0;
}
.layer:nth-child(1) {
padding: 120px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(50px);
border-radius: 15%;
animation-delay: 0.2s;
}
.layer:nth-child(2) {
padding: 105px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(80px);
border-radius: 20%;
animation-delay: 0.4s;
}
.layer:nth-child(3) {
padding: 90px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(110px);
border-radius: 25%;
animation-delay: 0.6s;
}
.layer:nth-child(4) {
padding: 75px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(140px);
border-radius: 30%;
animation-delay: 0.8s;
}
.layer:nth-child(5) {
padding: 60px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(170px);
border-radius: 35%;
animation-delay: 1s;
}
.layer:nth-child(6) {
padding: 45px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(200px);
border-radius: 40%;
animation-delay: 1.2s;
}
.layer:nth-child(7) {
padding: 30px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(230px);
border-radius: 45%;
animation-delay: 1.4s;
}
.layer:nth-child(8) {
padding: 15px;
transform: translate(-50%, -50%) rotateZ(180deg) translateZ(260px);
border-radius: 50%;
animation-delay: 1.6s;
}
/* Load animation */
@keyframes
load { to {
opacity: .2;
}
}
3. The main JavaScript. Copy and insert the following JavaScript snippets after jQuery.
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous">
</script>
//Throttle:
var throttleOn = false;
var actionLock = false;
var throttleTimer = 100;
function throttle(e){
if(throttleOn){
actionLock = true;
};
if(!actionLock){
throttleOn = true;
setTimeout(function(){
throttleOn = false;
}, throttleTimer);
translate(e);
};
actionLock = false;
};
//Tracking:
var threshold = 20;
var box = $(".box");
function translate(e){
var xOrigin = box.width() / 2;
var yOrigin = box.height() / 2;
var xPivot = (e.clientY - yOrigin) / yOrigin * -threshold;
var yPivot = (e.clientX - xOrigin) / xOrigin * threshold;
box.css({
'transform': 'translate(-50%, -50%) rotateX('+xPivot+'deg) rotateY('+yPivot+'deg)'
});
};
4. Activate the effect on mouse move.
$(window).mousemove(function(e){
throttle(e);
});
This awesome jQuery plugin is developed by Tobias Bogliolo. For more Advanced Usages, please check the demo page or visit the official website.











