/*//////////////////////////*/ /*//////////////////////////*/ /*/ JQuery IMAGEFIT /*/ /*/ 1.0.0 /*/ /*/ by Periplo /*/ /*//////////////////////////*/ /*//////////////////////////*/ (function ($) { $.fn.imagefit = function (options) { //Default setting var opts = $.extend({}, $.fn.imagefit.defaults, options); //Public vars var html = $('html'); html.data('main', this); html.data('ignore', opts.ignore); html.data('mode', opts.mode); html.data('hor', opts.halign); html.data('ver', opts.valign); html.data('force', opts.force); //Private vars var mw = html.data('main').width(); var mh = html.data('main').height(); var nw = 0, nh = 0; var imgs = 0; //Container CSS html.data('main').css('overflow', 'hidden'); html.data('main').css('position', 'relative'); //Look for imgs html.data('main').find('img:not(' + html.data('ignore') + ')').each(function ($i) { var img = $(this); opts.onStart($i, html.data('main'), img) img.load(function () { opts.onLoad($i, html.data('main'), img) }); img.error(function () { opts.onError($i, html.data('main'), img) }); img.css('position', 'absolute'); var iw = $(this).width(); var ih = $(this).height(); var top = 0; var left = 0; var ratio = 1; var size = []; ++imgs; $("").attr("src", img.attr('src')).load(function () { size['w'] = this.width; size['h'] = this.height; ratio = size['w'] / size['h']; if (html.data('mode') == 'outside') { if (mw / mh > iw / ih) { if (html.data('force') === false && (mw > size['w'] || mh > size['h'])) { nw = size['w']; nh = size['h']; top = Math.round((mh - nh) / 2); if (html.data('hor') == 'left') { left = 0; } else if (html.data('hor') == 'right') { left = left = Math.round(((mw - nw) / 2) * 2); } else { left = Math.round((mw - nw) / 2); } } else { nw = mw; nh = Math.round((nw * ih) / iw); top = -Math.abs(Math.round((nh - mh) / 2)); } if (html.data('ver') == 'top') { img.css('top', '0'); img.css('left', left + 'px'); } else if (html.data('ver') == 'bottom') { img.css('top', (top * 2) + 'px'); img.css('left', left + 'px'); } else { img.css('top', top + 'px'); img.css('left', left + 'px'); } } else { if (html.data('force') === false && (mw > size['w'] || mh > size['h'])) { nw = size['w']; nh = size['h']; top = Math.round((mh - nh) / 2); left = Math.round((mw - nw) / 2); } else { nh = mh; nw = Math.round((nh * iw) / ih); left = -Math.abs(Math.round((nw - mw) / 2)); } if (html.data('hor') == 'left') { img.css('top', top + 'px'); img.css('left', '0'); } else if (html.data('hor') == 'right') { img.css('left', (left * 2) + 'px'); img.css('top', top + 'px'); } else { img.css('left', left + 'px'); img.css('top', top + 'px'); } } img.width(nw); img.height(nh); img.css('width', nw); img.css('height', nh); } else if (html.data('mode') == 'inside') { if (mw / mh > iw / ih) { if (html.data('force') === false && mw > size['w'] && mh > size['h']) { nw = size['w']; nh = size['h']; top = Math.round((mh - nh) / 2); left = Math.round((mw - nw) / 2); } else { nh = mh; nw = Math.round((nh * iw) / ih); left = Math.round((mw - nw) / 2); } img.css('left', left + 'px'); img.css('top', top + 'px'); if (html.data('hor') == 'left') { img.css('left', '0'); } if (html.data('ver') == 'top') { img.css('top', '0'); } if (html.data('hor') == 'right') { img.css('left', (left * 2) + 'px'); } if (html.data('ver') == 'bottom') { img.css('top', (top * 2) + 'px'); } } else { if (html.data('force') === false && mw > size['w'] && mh > size['h']) { nw = size['w']; nh = size['h']; top = Math.round((mh - nh) / 2); left = Math.round((mw - nw) / 2); } else { nw = mw; nh = Math.round((nw * ih) / iw); top = Math.round((mh - nh) / 2); } img.css('left', left + 'px'); img.css('top', top + 'px'); if (html.data('hor') == 'left') { img.css('left', '0'); } if (html.data('ver') == 'top') { img.css('top', '0'); } if (html.data('hor') == 'right') { img.css('left', (left * 2) + 'px'); } if (html.data('ver') == 'bottom') { img.css('top', (top * 2) + 'px'); } } img.width(nw); img.height(nh); img.css('width', nw); img.css('height', nh); } }); }); console.log('imageFit found ' + imgs + ' images.'); }; $.fn.imagefit.defaults = { ignore: '', // Class name. mode: 'outside', // 'inside' halign: 'center', // 'left', 'right' valign: 'middle', // 'top', 'bottom' force: true, // false, onLoad: null, onError: null, onStart: null }; })(jQuery);