Jelajahi Sumber

update scripts.js file with new responsive scripts

Eddie Machado 12 tahun lalu
induk
melakukan
e417986030
1 mengubah file dengan 106 tambahan dan 97 penghapusan
  1. 106 97
      library/js/scripts.js

+ 106 - 97
library/js/scripts.js

@@ -1,108 +1,117 @@
 /*
 /*
-Bones Scripts File
-Author: Eddie Machado
+ * 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.
+*/
 
 
-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.
 
 
+/*
+ * 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 )
 */
 */
-
-// IE8 ployfill for GetComputed Style (for Responsive Script below)
-if (!window.getComputedStyle) {
-	window.getComputedStyle = function(el, pseudo) {
-		this.el = el;
-		this.getPropertyValue = function(prop) {
-			var re = /(\-([a-z]){1})/g;
-			if (prop == 'float') prop = 'styleFloat';
-			if (re.test(prop)) {
-				prop = prop.replace(re, function () {
-					return arguments[2].toUpperCase();
-				});
-			}
-			return el.currentStyle[prop] ? el.currentStyle[prop] : null;
-		}
-		return this;
-	}
+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();
 
 
-// as the page loads, call these scripts
-jQuery(document).ready(function($) {
 
 
-	/*
-	Responsive jQuery is a tricky thing.
-	There's a bunch of different ways to handle
-	it, so be sure to research and find the one
-	that works for you best.
-	*/
-	
-	/* getting viewport width */
-	var responsive_viewport = $(window).width();
-	
-	/* if is below 481px */
-	if (responsive_viewport < 481) {
-	
-	} /* end smallest screen */
-	
-	/* if is larger than 481px */
-	if (responsive_viewport > 481) {
-	
-	} /* end larger than 481px */
-	
-	/* if is above or equal to 768px */
-	if (responsive_viewport >= 768) {
-	
-		/* load gravatars */
-		$('.comment img[data-gravatar]').each(function(){
-			$(this).attr('src',$(this).attr('data-gravatar'));
-		});
-		
-	}
-	
-	/* off the bat large screen actions */
-	if (responsive_viewport > 1030) {
-	
+/*
+ * 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() {
+ *
+ *      // 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.
+*/
+function loadGravatars() {
+  // set the viewport using the function above
+  viewport = updateViewportDimensions();
+  // if the viewport is tablet or larger, we load in the gravatars
+  if (viewport.width >= 768) {
+  jQuery('.comment img[data-gravatar]').each(function(){
+    jQuery(this).attr('src',$(this).attr('data-gravatar'));
+  });
 	}
 	}
-	
-	
-	// add all your scripts here
-	
- 
-}); /* end of as page load scripts */
+} // end function
 
 
 
 
-/*! A fix for the iOS orientationchange zoom bug.
- Script by @scottjehl, rebound by @wilto.
- MIT License.
+/*
+ * Put all your regular jQuery in here.
 */
 */
-(function(w){
-	// This fix addresses an iOS bug, so return early if the UA claims it's something else.
-	if( !( /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1 ) ){ return; }
-	var doc = w.document;
-	if( !doc.querySelector ){ return; }
-	var meta = doc.querySelector( "meta[name=viewport]" ),
-		initialContent = meta && meta.getAttribute( "content" ),
-		disabledZoom = initialContent + ",maximum-scale=1",
-		enabledZoom = initialContent + ",maximum-scale=10",
-		enabled = true,
-		x, y, z, aig;
-	if( !meta ){ return; }
-	function restoreZoom(){
-		meta.setAttribute( "content", enabledZoom );
-		enabled = true; }
-	function disableZoom(){
-		meta.setAttribute( "content", disabledZoom );
-		enabled = false; }
-	function checkTilt( e ){
-		aig = e.accelerationIncludingGravity;
-		x = Math.abs( aig.x );
-		y = Math.abs( aig.y );
-		z = Math.abs( aig.z );
-		// If portrait orientation and in one of the danger zones
-		if( !w.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ){
-			if( enabled ){ disableZoom(); } }
-		else if( !enabled ){ restoreZoom(); } }
-	w.addEventListener( "orientationchange", restoreZoom, false );
-	w.addEventListener( "devicemotion", checkTilt, false );
-})( this );
+jQuery(document).ready(function($) {
+
+  /*
+   * Let's fire off the gravatar function
+   * You can remove this if you don't need it
+  */
+  loadGravatars();
+
+
+}); /* end of as page load scripts */