/* * Plugin Name: Resize Image to Parent Container * * Author: Christian Varga * Author URI: http://christianvarga.com * Plugin Source: https://github.com/levymetal/jquery-resize-image-to-parent/ * */ (function($) { $.fn.resizeToParent = function(opts) { var defaults = { parent: 'div', delay: 100 } var opts = $.extend(defaults, opts); function positionImage(obj) { // reset image (in case we're calling this a second time, for example on resize) obj.css({'width': '', 'height': '', 'margin-left': '', 'margin-top': ''}); // dimensions of the parent var parentWidth = obj.parents(opts.parent).width(); var parentHeight = obj.parents(opts.parent).height(); // dimensions of the image var imageWidth = obj.width(); var imageHeight = obj.height(); // step 1 - calculate the percentage difference between image width and container width var diff = imageWidth / parentWidth; // step 2 - if height divided by difference is smaller than container height, resize by height. otherwise resize by width if ((imageHeight / diff) < parentHeight) { obj.css({'width': 'auto', 'height': parentHeight}); // set image variables to new dimensions imageWidth = imageWidth / (imageHeight / parentHeight); imageHeight = parentHeight; } else { obj.css({'height': 'auto', 'width': parentWidth}); // set image variables to new dimensions imageWidth = parentWidth; imageHeight = imageHeight / diff; } // step 3 - center image in container var leftOffset = (imageWidth - parentWidth) / -2; var topOffset = (imageHeight - parentHeight) / -2; obj.css({'margin-left': leftOffset, 'margin-top': topOffset}); } // run the position function on window resize (to make it responsive) var tid; var elems = this; $(window).on('resize', function() { clearTimeout(tid); tid = setTimeout(function() { elems.each(function() { positionImage($(this)); }); }, opts.delay); }); return this.each(function() { var obj = $(this); // hack to force ie to run the load function... ridiculous bug // http://stackoverflow.com/questions/7137737/ie9-problems-with-jquery-load-event-not-firing obj.attr("src", obj.attr("src")); // bind to load of image obj.load(function() { positionImage(obj); }); // run the position function if the image is cached if (this.complete) { positionImage(obj); } }); } })( jQuery );