Modern Background Parallax Scroll Effect With jQuery And CSS
File Size: | 4.23 KB |
---|---|
Views Total: | 10775 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |
An elegant approach to creating a modern smooth parallax scroll effect on background images using jQuery and CSS background properties.
How to use it:
1. Add a background image to the container using the data-image-src
attribute:
<div class="parallax" data-image-src="bg.jpg"> Any Content here </div>
2. The necessary CSS rules for the parallax image.
.parallax { position: relative; background-attachment: fixed; background-position: center 0; background-repeat: no-repeat; background-size: cover; height: 100%; }
3. Turn off the parallax scroll effect for tablets and phones.
@media only screen and (max-device-width: 1024px) { .parallax { background-attachment: scroll; } }
4. Import the needed jQuery JavaScript library into the document.
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT" crossorigin="anonymous"> </script>
5. Populate images from data
attributes.
var scrolled = $(window).scrollTop() $('.parallax').each(function(index) { var imageSrc = $(this).data('image-src') var imageHeight = $(this).data('height') $(this).css('background-image','url(' + imageSrc + ')') $(this).css('height', imageHeight) // Adjust the background position. var initY = $(this).offset().top var height = $(this).height() var diff = scrolled - initY var ratio = Math.round((diff / height) * 100) $(this).css('background-position','center ' + parseInt(-(ratio * 1.5)) + 'px') })
6. Check if the element is in the viewport.
function isInViewport(node) { // Am I visible? Height and Width are not explicitly necessary in visibility // detection, the bottom, right, top and left are the essential checks. If an // image is 0x0, it is technically not visible, so it should not be marked as // such. That is why either width or height have to be > 0. var rect = node.getBoundingClientRect() return ( (rect.height > 0 || rect.width > 0) && rect.bottom >= 0 && rect.right >= 0 && rect.top <= (window.innerHeight || document.documentElement.clientHeight) && rect.left <= (window.innerWidth || document.documentElement.clientWidth) ) }
7. Attach the scroll event to the window. Calculate the scroll ratio of each element and change the image position with that ratio.
$(window).scroll(function() { var scrolled = $(window).scrollTop() $('.parallax').each(function(index, element) { var initY = $(this).offset().top var height = $(this).height() var endY = initY + $(this).height() // Check if the element is in the viewport. var visible = isInViewport(this) if(visible) { var diff = scrolled - initY var ratio = Math.round((diff / height) * 100) $(this).css('background-position','center ' + parseInt(-(ratio * 1.5)) + 'px') } }) })
This awesome jQuery plugin is developed by lautiamkok. For more Advanced Usages, please check the demo page or visit the official website.