/* * BASED ON THE ORIGINAL IDEA OF Marius Craciunoiu * https://medium.com/@mariusc23/hide-header-on-scroll-down-show-on-scroll-up-67bbaae9a78c#.wc32ja29i * * * jQuery.shyheader v0.1.0 * https://github.com/alejandromur/shyheader * Copyright 2016, alejandro@mamutlove.es * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */ (function( $, window, document, undefined ){ "use strict"; $.shyheader = function(el, options){ var base = this; base.$el = $(el); base.$nav = base.$el.find( '.header-logo' ); base.el = el; base.$el.data('shyheader',base); var IS_SCROLLING = false; var SCROLL = 0; var OLD_OFFSET = 0; var CURRENT_OFFSET = 0; var DELTA = 5; var HEADER_HEIGHT = 0; var HEADER_OFFSET = 0; var NAV_HEIGHT = 0; var BODY = ""; base.initialize = function(){ base.options = $.extend({},$.shyheader.defaultOptions, options); HEADER_HEIGHT = base.$el.outerHeight(true); HEADER_OFFSET = base.$el.offset().top; NAV_HEIGHT = base.$nav.outerHeight(true); base.$el.addClass( 'is-init' ); if( ( ! base.$el.hasClass( 'transparent' ) ) && ! $( '.header-placeholder' ).length ) { if( CURRENT_OFFSET > base.$el.height() ) { $("
").insertAfter(base.$el); base.$nav.css("position", "fixed"); base.checkAdminBar( 'add' ); } } if( base.options.container !== "undefined" ){ BODY = $('.'+base.options.container); BODY.css("padding-top", HEADER_HEIGHT+"px"); base.options.offsetContentFlag = true; } window.addEventListener("scroll", base.triggerScroll, false); }; base.triggerScroll = function(){ IS_SCROLLING = true; SCROLL = document.body.scrollTop || window.pageYOffset; base.checkScrollPosition(); base.initialize(); }; base.checkScrollPosition = function(){ if( base.options.offsetContentFlag ){ if( SCROLL >= HEADER_HEIGHT ){ base.watch(); } }else{ base.watch(); } }; base.watch = function(){ if( IS_SCROLLING ) { base.getDirection(); IS_SCROLLING = false; } }; base.checkAdminBar = function ( type = 'add' ) { if( base.$el.hasClass( 'with-admin-bar' ) ) { if( type === 'add' ) { base.$nav.css("top", "32px"); } else { base.$nav.css("top", ""); } } base.$el.removeClass('is-init'); } base.solidStyle = function( type = 'add' ) { if( !base.$el.hasClass( "solid" ) && !base.$el.hasClass( "light" ) ) { return; } if( type === 'remove' ) { base.$el.removeClass( "show" ); base.$nav.css( "position", "relative" ); $( ".header-placeholder" ).css( "display", "none" ); base.checkAdminBar( 'remove' ); } else { base.$nav.css( "position", "fixed" ); $( ".header-placeholder" ).css( "display", "block" ); base.checkAdminBar( 'add' ); } } base.getDirection = function() { CURRENT_OFFSET = SCROLL; if( CURRENT_OFFSET === 0 ) { base.solidStyle('remove'); base.$el.removeClass('show'); return; } if( HEADER_OFFSET >= CURRENT_OFFSET || CURRENT_OFFSET <= 150 || CURRENT_OFFSET === 0 ) { base.solidStyle('remove'); } else { base.solidStyle(); } if( Math.abs(OLD_OFFSET - CURRENT_OFFSET) <= DELTA ){ return; } if( base.$el.hasClass( 'fixed-mode' ) ) { if( CURRENT_OFFSET > HEADER_OFFSET ) { base.$el.addClass('show'); } else { base.$el.removeClass('show'); } return; } if( CURRENT_OFFSET > OLD_OFFSET ){ base.$el.addClass(base.options.classname); base.$el.removeClass('show'); }else{ if( CURRENT_OFFSET + $(window).height() < $(document).height() ) { base.$el.removeClass(base.options.classname); base.$el.addClass('show'); } } OLD_OFFSET = CURRENT_OFFSET; }; base.initialize(); }; $.shyheader.defaultOptions = { classname : "is-watching", container : 'undefined', offsetContentFlag : false }; $.fn.shyheader = function(options){ return this.each(function(){ var shyheader = new $.shyheader(this,options); }); }; }( jQuery, window, document ));