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.