Last active
November 1, 2022 01:22
-
-
Save levymetal/5083909 to your computer and use it in GitHub Desktop.
Tutorial on how to use jQuery resize to parent plugin, full post available @ http://christianvarga.com/jquery-resize-image-to-parent-container-plugin/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$('#myImage').resizeToParent(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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.on('load', function() { | |
positionImage(obj); | |
}); | |
// run the position function if the image is cached | |
if (this.complete) { | |
positionImage(obj); | |
} | |
}); | |
} | |
})( jQuery ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$('#myImage').resizeToParent({parent: '.parentContainer'}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment