锘?/ jQuery.autoIMG.js - 2010-04-02 - Tang Bin - http://planeArt.cn/ - MIT Licensed (function ($) { // 妫€娴嬫槸鍚︽敮鎸乧ss2.1 max-width灞炴€ var isMaxWidth = 'maxWidth' in document.documentElement.style, // 妫€娴嬫槸鍚E7娴忚鍣 isIE7 = !-[1,] && !('prototype' in Image) && isMaxWidth; $.fn.autoIMG = function () { var maxWidth = this.width(); return this.find('img').each(function (i, img) { // 闆ㄥ摬 娣诲姞鍥剧墖閾炬帴锛屽厛鍒ゆ柇鍘熷浘鏄惁甯﹂摼鎺ワ紝濡傛灉甯﹂摼鎺ュ垯涓嶉噸澶嶆坊鍔 if(jQuery(this).parent().prop("tagName") != 'A'){ img.onclick = function(){window.open(img.src)}; img.title="鐐瑰嚮鏌ョ湅澶у浘" img.style.cursor = 'pointer'; } if (img.style.width) return; //鎺掗櫎浜嗗湪鍐呭涓洿鎺ヨ缃簡鍥剧墖澶у皬鐨勬儏鍐 // 濡傛灉鏀寔max-width灞炴€у垯浣跨敤姝わ紝鍚﹀垯浣跨敤涓嬮潰鏂瑰紡锛屽浘鐗囧睘鎬т腑鍔犱簡height鏃跺鑷撮珮搴﹁鍥哄畾鑰屽彉褰 //if (isMaxWidth) return img.style.maxWidth = maxWidth + 'px'; var src = img.src; // 闅愯棌鍘熷浘 img.style.display = 'none'; img.removeAttribute('src'); // 鑾峰彇鍥剧墖澶村昂瀵告暟鎹悗绔嬪嵆璋冩暣鍥剧墖 imgReady(src, function (width, height) { // 绛夋瘮渚嬬缉灏 if (width > maxWidth) { height = maxWidth / width * height, width = maxWidth; img.style.width = width + 'px'; img.style.height = height + 'px'; }; // 鏄剧ず鍘熷浘 img.style.display = ''; img.setAttribute('src', src); }); }); }; // IE7缂╂斁鍥剧墖浼氬け鐪燂紝閲囩敤绉佹湁灞炴€ч€氳繃涓夋鎻掑€艰В鍐 isIE7 && (function (c,d,s) {s=d.createElement('style');d.getElementsByTagName('head')[0].appendChild(s);s.styleSheet&&(s.styleSheet.cssText+=c)||s.appendChild(d.createTextNode(c))})('img {-ms-interpolation-mode:bicubic}',document); /** * 鍥剧墖澶存暟鎹姞杞藉氨缁簨浠 * @see http://www.planeart.cn/?p=1121 * @param {String} 鍥剧墖璺緞 * @param {Function} 灏哄灏辩华 (鍙傛暟1鎺ユ敹width; 鍙傛暟2鎺ユ敹height) * @param {Function} 鍔犺浇瀹屾瘯 (鍙€? 鍙傛暟1鎺ユ敹width; 鍙傛暟2鎺ユ敹height) * @param {Function} 鍔犺浇閿欒 (鍙€? */ var imgReady = (function () { var list = [], intervalId = null, // 鐢ㄦ潵鎵ц闃熷垪 tick = function () { var i = 0; for (; i < list.length; i++) { list[i].end ? list.splice(i--, 1) : list[i](); }; !list.length && stop(); }, // 鍋滄鎵€鏈夊畾鏃跺櫒闃熷垪 stop = function () { clearInterval(intervalId); intervalId = null; }; return function (url, ready, load, error) { var check, width, height, newWidth, newHeight, img = new Image(); img.src = url; // 濡傛灉鍥剧墖琚紦瀛橈紝鍒欑洿鎺ヨ繑鍥炵紦瀛樻暟鎹 if (img.complete) { ready(img.width, img.height); load && load(img.width, img.height); return; }; // 妫€娴嬪浘鐗囧ぇ灏忕殑鏀瑰彉 width = img.width; height = img.height; check = function () { newWidth = img.width; newHeight = img.height; if (newWidth !== width || newHeight !== height || // 濡傛灉鍥剧墖宸茬粡鍦ㄥ叾浠栧湴鏂瑰姞杞藉彲浣跨敤闈㈢Н妫€娴 newWidth * newHeight > 1024 ) { ready(newWidth, newHeight); check.end = true; }; }; check(); // 鍔犺浇閿欒鍚庣殑浜嬩欢 img.onerror = function () { error && error(); check.end = true; img = img.onload = img.onerror = null; }; // 瀹屽叏鍔犺浇瀹屾瘯鐨勪簨浠 img.onload = function () { load && load(img.width, img.height); !check.end && check(); // IE gif鍔ㄧ敾浼氬惊鐜墽琛宱nload锛岀疆绌簅nload鍗冲彲 img = img.onload = img.onerror = null; }; // 鍔犲叆闃熷垪涓畾鏈熸墽琛 if (!check.end) { list.push(check); // 鏃犺浣曟椂鍙厑璁稿嚭鐜颁竴涓畾鏃跺櫒锛屽噺灏戞祻瑙堝櫒鎬ц兘鎹熻€ if (intervalId === null) intervalId = setInterval(tick, 40); }; }; })(); })(jQuery);