關(guān)于圖片按比例自適應(yīng)縮放的js代碼
如下圖。
瞄了一下,居中可以用 text-align:center; 來實現(xiàn)。而按比例縮放,利用預(yù)設(shè) <img /> 的 width 、height 屬性解決不了。因為用戶圖片可能是很長的,也可能是很寬的。在線上想了一下他們的關(guān)系,按條件來判斷是這樣的:
if(實際寬度 > 預(yù)覽最大寬度) {
縮放寬度 = 預(yù)覽最大寬度
}
if(實際高度 > 預(yù)覽最大高度) {
縮放高度 = 預(yù)覽最大高度
}
但是這樣會有問題,比如當寬度和高度都被縮放,如果縮放比較不同,圖片就不是按比例縮放,會變得非常丑。為了讓它按比例縮放,就需要做各種判斷了。那這樣就違背了我們希望程序自動化的原則了。再想想,雖然不喜歡數(shù)學,但數(shù)學還是很好用的,應(yīng)該有其他辦法。而既然是按比例縮放,何不用實際圖像和預(yù)覽區(qū)域?qū)挾茸鞯谋壤齺碛嬎闼麄冴P(guān)系?hmmmm… 果然 OK。實際上我們永遠都只需要縮放寬度或高度中的其中一個。因為比例只有大和小種情況。具體的,寫一個函數(shù)來實現(xiàn)它吧:
/** * 圖片按比例自適應(yīng)縮放 * @param img {Element} 用戶上傳的圖片 * @param maxWidth {Number} 預(yù)覽區(qū)域的最大寬度 * @param maxHeight {Number} 預(yù)覽區(qū)域的最大高度 */ var resizeImg = function(img, maxWidth, maxHeight){ var w = img.width, h = img.height; // 當圖片比預(yù)覽區(qū)域小時不做任何改變 if(w < maxWidth && h < maxHeight) return; // 當實際圖片比例大于預(yù)覽區(qū)域?qū)捀弑壤龝r // 縮放圖片寬度,反之縮放圖片寬度 w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; };
完整的測試代碼:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>圖片按比例自適應(yīng)縮放</title> <style> .cnt{text-align:center;width:600px;height:350px;margin:0 auto;border:1px solid #ddd;} </style> </head> <body> <div class="cnt"> <img id="img" src="http://www.wallcoo.com/1920x1440/1920x1440_nature_wallpapers_02/wallpapers/1920x1440/%5Bwallcoo.com%5D_1920X1440_nature_wallpapers_aVistas005.jpg" alt="alipay" /> <br /> <a rel="nofollow">查看原圖</a> || <a title="關(guān)于圖片按比例自適應(yīng)縮放">返回文章:關(guān)于圖片按比例自適應(yīng)縮放 »</a> </div> <script> window.onload = function() { var img = document.getElementById('img'), /** * 圖片按比例自適應(yīng)縮放 * @param img {Element} 用戶上傳的圖片 * @param maxWidth {Number} 預(yù)覽區(qū)域的最大寬度 * @param maxHeight {Number} 預(yù)覽區(qū)域的最大高度 */ resizeImg = function(img, maxWidth, maxHeight){ var w = img.width, h = img.height; // 當圖片比預(yù)覽區(qū)域小時不做任何改變 if(w < maxWidth && h < maxHeight) return; // 當實際圖片比例大于預(yù)覽區(qū)域?qū)捀弑壤龝r // 縮放圖片寬度,反之縮放圖片寬度 w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; }; resizeImg(img, 500, 300); } </script> </body> </html>
JS控制圖片顯示的大?。▓D片等比例縮放)
在網(wǎng)頁中放圖片的時候我們經(jīng)常會遇到圖片變形的問題,今天給大家分享一個等比例壓縮圖片的js,可以設(shè)置最大寬高,然后等比例自動壓縮。
核心代碼
<script type="text/javascript"> function AutoResizeImage(maxWidth,maxHeight,objImg){ var img = new Image(); img.src = objImg.src; var hRatio; var wRatio; var Ratio = 1; var w = img.width; var h = img.height; wRatio = maxWidth / w; hRatio = maxHeight / h; if (maxWidth ==0 && maxHeight==0){ Ratio = 1; }else if (maxWidth==0){ if (hRatio<1) Ratio = hRatio; }else if (maxHeight==0){ if (wRatio<1) Ratio = wRatio; }else if (wRatio<1 || hRatio<1){ Ratio = (wRatio<=hRatio?wRatio:hRatio); } if (Ratio<1){ w = w * Ratio; h = h * Ratio; } objImg.height = h; objImg.width = w; } </script>
在對應(yīng)的img上增加onload=”AutoResizeImage(width,height,this)這句即可。
例如:
<img src="#" onload="AutoResizeImage(200,150,this)" alt="200 X 150"/>
jquery的后期更方便處理,而且頁面中不需要加onload
一般css中加入最大寬帶,高度 auto 然后再加上js
$('#content').find('img').each(function(){ var img = this; if (img.width >= 800 && !$(this).hasClass("nohref")){ img.style.width = "800px"; img.style.height = "auto"; } });
這樣基本上就沒有問題了
相關(guān)文章
javascript 動態(tài)調(diào)整圖片尺寸實現(xiàn)代碼
在自己的網(wǎng)站上更新文章時一個比較常見的問題是:文章插圖太寬,使整個網(wǎng)頁都變形了。如果對每個插圖都先進行縮放再插入的話,太麻煩了。2009-12-12javascript圖片自動縮放和垂直居中處理函數(shù)
非常不錯的應(yīng)用代碼,方便我們處理一些圖片效果2008-10-10javascript批量檢查當圖片不存在時則顯示默認圖片的代碼
批量檢查圖片地址顯示是不是有錯誤,在ie瀏覽器中是有當圖片不存在時的onerror事件的,下面的代碼即是非常不錯的應(yīng)用。2008-09-09