jQuery Sticky Menu with Background Parallax & Blur Effects

File Size: 221 KB
Views Total: 11998
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   
jQuery Sticky Menu with Background Parallax & Blur Effects

A cool jQuery plugin used to create a fixed menu with background image parallax & blur effects as you scroll down the web page.

How to use it:

1. Create a header for your web page that you will see the parallax & blur-out effects when scrolling the page.

<header>
  <div class="content">
    <hgroup>
      <h1>LOGO</h1>
      <i>slogan</i> </hgroup>
  </div>
  <div class="overlay"></div>
</header>

2. Add background image to the header and set other required styles in your CSS.

header {
  height: 100%;
  position: relative;
  overflow: hidden;
  background: url(background.jpg) center no-repeat;
  background-size: cover;
}

header .content {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
}

header h1,
header h2 { margin: 0; }

header h2 {
  text-transform: uppercase;
  margin-top: -.5em;
}

header hgroup {
  -webkit-transform: translate(-50%, -50%);
  -moz-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  -o-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  display: inline-block;
  text-align: center;
  position: absolute;
  top: 50%;
  left: 50%;
  color: #fff;
  border: 5px solid #fff;
  padding: .5em 3em;
  background-color: rgba(0, 0, 0, 0.2);
  z-index: 2;
}

header .overlay {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  background: #333 center no-repeat;
  background-size: cover;
  z-index: 0;
  opacity: 0;
  -webkit-filter: blur(4px);
}

3. Create a top menu and main content for your website as follows.

<section class="site">
  <nav>
    <a href="">Menu 1</a> 
    <a href="">Menu 2</a>
    <a href="">Menu 3</a>
    ...
  </nav>

  Main content goes here 

</section>

4. Style the top menu and make it sticky at the top on your website.

.site {
  padding: 20em 0;
  text-align: center;
  background-color: #efefef;
  font-size: .8em;
  color: #444;
  position: relative
}

.site a {
  color: #666;
  text-decoration: none;
}

.site a:hover { color: #222; }

.site nav {
  position: absolute;
  top: 0;
  left: 0;
  background: #222;
  width: 100%
}

.site nav a {
  padding: 10px 30px;
  font-size: 1.3em;
  display: inline-block
}

.site nav a:hover {
  background: #333;
  color: #fff
}

5. Include the necessary jQuery library at the bottom of the document.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

6. The Javascript to enable the fixed menu and the parallax & blur effects

var $content = $('header .content')
  , $blur    = $('header .overlay')
  , wHeight  = $(window).height();

$(window).on('resize', function(){
  wHeight = $(window).height();
});

window.requestAnimFrame = (function()
{
  return  window.requestAnimationFrame       ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame    ||
          function( callback ){
            window.setTimeout(callback, 1000 / 60);
          };
})();

function Scroller()
{
  this.latestKnownScrollY = 0;
  this.ticking            = false;
}

Scroller.prototype = {
 
  init: function() {
    window.addEventListener('scroll', this.onScroll.bind(this), false);
    $blur.css('background-image',$('header:first-of-type').css('background-image'));
  },


  onScroll: function() {
    this.latestKnownScrollY = window.scrollY;
    this.requestTick();
  },

  
  requestTick: function() {
    if( !this.ticking ) {
      window.requestAnimFrame(this.update.bind(this));
    }
    this.ticking = true;
  },

  update: function() {
    var currentScrollY = this.latestKnownScrollY;
    this.ticking       = false;
    
    
    var slowScroll = currentScrollY / 2
      , blurScroll = currentScrollY * 2
      , opaScroll = 1.4 - currentScrollY / 400;
   if(currentScrollY > wHeight)
     $('nav').css('position','fixed');
   else
     $('nav').css('position','absolute');
    
    $content.css({
      'transform'         : 'translateY(' + slowScroll + 'px)',
      '-moz-transform'    : 'translateY(' + slowScroll + 'px)',
      '-webkit-transform' : 'translateY(' + slowScroll + 'px)',
      'opacity' : opaScroll
    });
    
    $blur.css({
      'opacity' : blurScroll / wHeight
    });
  }
};


var scroller = new Scroller();  
scroller.init();

This awesome jQuery plugin is developed by nodws. For more Advanced Usages, please check the demo page or visit the official website.