| /* |
| * Bones Scripts File |
| * Author: Eddie Machado |
| * |
| * This file should contain any js scripts you want to add to the site. |
| * Instead of calling it in the header or throwing it inside wp_head() |
| * this file will be called automatically in the footer so as not to |
| * slow the page load. |
| * |
| * There are a lot of example functions and tools in here. If you don't |
| * need any of it, just remove it. They are meant to be helpers and are |
| * not required. It's your world baby, you can do whatever you want. |
| */ |
| |
| |
| /* |
| * Get Viewport Dimensions |
| * returns object with viewport dimensions to match css in width and height properties |
| * ( source: http://andylangton.co.uk/blog/development/get-viewport-size-width-and-height-javascript ) |
| */ |
| function updateViewportDimensions() { |
| var w=window,d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0],x=w.innerWidth||e.clientWidth||g.clientWidth,y=w.innerHeight||e.clientHeight||g.clientHeight; |
| return { width:x,height:y }; |
| } |
| // setting the viewport width |
| var viewport = updateViewportDimensions(); |
| |
| |
| /* |
| * Throttle Resize-triggered Events |
| * Wrap your actions in this function to throttle the frequency of firing them off, for better performance, esp. on mobile. |
| * ( source: http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-is-completed ) |
| */ |
| var waitForFinalEvent = (function () { |
| var timers = {}; |
| return function (callback, ms, uniqueId) { |
| if (!uniqueId) { uniqueId = "Don't call this twice without a uniqueId"; } |
| if (timers[uniqueId]) { clearTimeout (timers[uniqueId]); } |
| timers[uniqueId] = setTimeout(callback, ms); |
| }; |
| })(); |
| |
| // how long to wait before deciding the resize has stopped, in ms. Around 50-100 should work ok. |
| var timeToWaitForLast = 100; |
| |
| |
| /* |
| * Here's an example so you can see how we're using the above function |
| * |
| * This is commented out so it won't work, but you can copy it and |
| * remove the comments. |
| * |
| * |
| * |
| * If we want to only do it on a certain page, we can setup checks so we do it |
| * as efficient as possible. |
| * |
| * if( typeof is_home === "undefined" ) var is_home = $('body').hasClass('home'); |
| * |
| * This once checks to see if you're on the home page based on the body class |
| * We can then use that check to perform actions on the home page only |
| * |
| * When the window is resized, we perform this function |
| * $(window).resize(function () { |
| * |
| * // if we're on the home page, we wait the set amount (in function above) then fire the function |
| * if( is_home ) { waitForFinalEvent( function() { |
| * |
| * // update the viewport, in case the window size has changed |
| * viewport = updateViewportDimensions(); |
| * |
| * // if we're above or equal to 768 fire this off |
| * if( viewport.width >= 768 ) { |
| * console.log('On home page and window sized to 768 width or more.'); |
| * } else { |
| * // otherwise, let's do this instead |
| * console.log('Not on home page, or window sized to less than 768.'); |
| * } |
| * |
| * }, timeToWaitForLast, "your-function-identifier-string"); } |
| * }); |
| * |
| * Pretty cool huh? You can create functions like this to conditionally load |
| * content and other stuff dependent on the viewport. |
| * Remember that mobile devices and javascript aren't the best of friends. |
| * Keep it light and always make sure the larger viewports are doing the heavy lifting. |
| * |
| */ |
| |
| /* |
| * We're going to swap out the gravatars. |
| * In the functions.php file, you can see we're not loading the gravatar |
| * images on mobile to save bandwidth. Once we hit an acceptable viewport |
| * then we can swap out those images since they are located in a data attribute. |
| */ |
| |
| |
| |
| /* |
| * Put all your regular jQuery in here. |
| */ |
| jQuery(document).ready(function($) { |
| jQuery('header nav').meanmenu(); |
| |
| // browser window scroll (in pixels) after which the "back to top" link is shown |
| var offset = 300, |
| //browser window scroll (in pixels) after which the "back to top" link opacity is reduced |
| offset_opacity = 1200, |
| //duration of the top scrolling animation (in ms) |
| scroll_top_duration = 700, |
| //grab the "back to top" link |
| $back_to_top = $('.cd-top'); |
| |
| //hide or show the "back to top" link |
| $(window).scroll(function(){ |
| ( $(this).scrollTop() > offset ) ? $back_to_top.addClass('cd-is-visible') : $back_to_top.removeClass('cd-is-visible cd-fade-out'); |
| if( $(this).scrollTop() > offset_opacity ) { |
| $back_to_top.addClass('cd-fade-out'); |
| } |
| }); |
| |
| //smooth scroll to top |
| $back_to_top.on('click', function(event){ |
| event.preventDefault(); |
| $('body,html').animate({ |
| scrollTop: 0 , |
| }, scroll_top_duration |
| ); |
| }); |
| |
| |
| }); /* end of as page load scripts */ |