1/*//////////////////////////*/ 2/*//////////////////////////*/ 3/*/ JQuery IMAGEFIT /*/ 4/*/ 1.0.0 /*/ 5/*/ by Periplo /*/ 6/*//////////////////////////*/ 7/*//////////////////////////*/ 8 9 10(function ($) { 11 $.fn.imagefit = function (options) { 12 //Default setting 13 var opts = $.extend({}, $.fn.imagefit.defaults, options); 14 15 //Public vars 16 var html = $('html'); 17 html.data('main', this); 18 html.data('ignore', opts.ignore); 19 html.data('mode', opts.mode); 20 html.data('hor', opts.halign); 21 html.data('ver', opts.valign); 22 html.data('force', opts.force); 23 24 //Private vars 25 var mw = html.data('main').width(); 26 var mh = html.data('main').height(); 27 var nw = 0, 28 nh = 0; 29 var imgs = 0; 30 31 //Container CSS 32 html.data('main').css('overflow', 'hidden'); 33 html.data('main').css('position', 'relative'); 34 35 //Look for imgs 36 html.data('main').find('img:not(' + html.data('ignore') + ')').each(function ($i) { 37 var img = $(this); 38 opts.onStart($i, html.data('main'), img) 39 img.load(function () { 40 opts.onLoad($i, html.data('main'), img) 41 }); 42 img.error(function () { 43 opts.onError($i, html.data('main'), img) 44 }); 45 img.css('position', 'absolute'); 46 var iw = $(this).width(); 47 var ih = $(this).height(); 48 var top = 0; 49 var left = 0; 50 var ratio = 1; 51 var size = []; 52 ++imgs; 53 54 $("<img/>").attr("src", img.attr('src')).load(function () { 55 size['w'] = this.width; 56 size['h'] = this.height; 57 ratio = size['w'] / size['h']; 58 59 60 if (html.data('mode') == 'outside') { 61 if (mw / mh > iw / ih) { 62 if (html.data('force') === false && (mw > size['w'] || mh > size['h'])) { 63 nw = size['w']; 64 nh = size['h']; 65 top = Math.round((mh - nh) / 2); 66 if (html.data('hor') == 'left') { 67 left = 0; 68 } else if (html.data('hor') == 'right') { 69 left = left = Math.round(((mw - nw) / 2) * 2); 70 } else { 71 left = Math.round((mw - nw) / 2); 72 } 73 } else { 74 nw = mw; 75 nh = Math.round((nw * ih) / iw); 76 top = -Math.abs(Math.round((nh - mh) / 2)); 77 } 78 79 80 if (html.data('ver') == 'top') { 81 img.css('top', '0'); 82 img.css('left', left + 'px'); 83 } else if (html.data('ver') == 'bottom') { 84 img.css('top', (top * 2) + 'px'); 85 img.css('left', left + 'px'); 86 } else { 87 img.css('top', top + 'px'); 88 img.css('left', left + 'px'); 89 } 90 } else { 91 if (html.data('force') === false && (mw > size['w'] || mh > size['h'])) { 92 nw = size['w']; 93 nh = size['h']; 94 top = Math.round((mh - nh) / 2); 95 left = Math.round((mw - nw) / 2); 96 } else { 97 nh = mh; 98 nw = Math.round((nh * iw) / ih); 99 left = -Math.abs(Math.round((nw - mw) / 2)); 100 } 101 102 103 if (html.data('hor') == 'left') { 104 img.css('top', top + 'px'); 105 img.css('left', '0'); 106 } else if (html.data('hor') == 'right') { 107 img.css('left', (left * 2) + 'px'); 108 img.css('top', top + 'px'); 109 } else { 110 img.css('left', left + 'px'); 111 img.css('top', top + 'px'); 112 } 113 } 114 115 img.width(nw); 116 img.height(nh); 117 img.css('width', nw); 118 img.css('height', nh); 119 } else if (html.data('mode') == 'inside') { 120 if (mw / mh > iw / ih) { 121 if (html.data('force') === false && mw > size['w'] && mh > size['h']) { 122 nw = size['w']; 123 nh = size['h']; 124 top = Math.round((mh - nh) / 2); 125 left = Math.round((mw - nw) / 2); 126 } else { 127 nh = mh; 128 nw = Math.round((nh * iw) / ih); 129 left = Math.round((mw - nw) / 2); 130 } 131 132 133 img.css('left', left + 'px'); 134 img.css('top', top + 'px'); 135 if (html.data('hor') == 'left') { 136 img.css('left', '0'); 137 } 138 if (html.data('ver') == 'top') { 139 img.css('top', '0'); 140 } 141 if (html.data('hor') == 'right') { 142 img.css('left', (left * 2) + 'px'); 143 } 144 if (html.data('ver') == 'bottom') { 145 img.css('top', (top * 2) + 'px'); 146 } 147 } else { 148 if (html.data('force') === false && mw > size['w'] && mh > size['h']) { 149 nw = size['w']; 150 nh = size['h']; 151 top = Math.round((mh - nh) / 2); 152 left = Math.round((mw - nw) / 2); 153 } else { 154 nw = mw; 155 nh = Math.round((nw * ih) / iw); 156 top = Math.round((mh - nh) / 2); 157 } 158 159 160 img.css('left', left + 'px'); 161 img.css('top', top + 'px'); 162 if (html.data('hor') == 'left') { 163 img.css('left', '0'); 164 } 165 if (html.data('ver') == 'top') { 166 img.css('top', '0'); 167 } 168 if (html.data('hor') == 'right') { 169 img.css('left', (left * 2) + 'px'); 170 } 171 if (html.data('ver') == 'bottom') { 172 img.css('top', (top * 2) + 'px'); 173 } 174 } 175 176 img.width(nw); 177 img.height(nh); 178 img.css('width', nw); 179 img.css('height', nh); 180 } 181 }); 182 183 }); 184 console.log('imageFit found ' + imgs + ' images.'); 185 186 187 }; 188 189 190 $.fn.imagefit.defaults = { 191 ignore: '', // Class name. 192 mode: 'outside', // 'inside' 193 halign: 'center', // 'left', 'right' 194 valign: 'middle', // 'top', 'bottom' 195 force: true, // false, 196 onLoad: null, 197 onError: null, 198 onStart: null 199 }; 200 201})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.