關(guān)于圖片按比例自適應(yīng)縮放的js代碼
如下圖。
瞄了一下,居中可以用 text-align:center; 來(lái)實(shí)現(xiàn)。而按比例縮放,利用預(yù)設(shè) <img /> 的 width 、height 屬性解決不了。因?yàn)橛脩魣D片可能是很長(zhǎng)的,也可能是很寬的。在線上想了一下他們的關(guān)系,按條件來(lái)判斷是這樣的:
if(實(shí)際寬度 > 預(yù)覽最大寬度) {
縮放寬度 = 預(yù)覽最大寬度
}
if(實(shí)際高度 > 預(yù)覽最大高度) {
縮放高度 = 預(yù)覽最大高度
}
但是這樣會(huì)有問(wèn)題,比如當(dāng)寬度和高度都被縮放,如果縮放比較不同,圖片就不是按比例縮放,會(huì)變得非常丑。為了讓它按比例縮放,就需要做各種判斷了。那這樣就違背了我們希望程序自動(dòng)化的原則了。再想想,雖然不喜歡數(shù)學(xué),但數(shù)學(xué)還是很好用的,應(yīng)該有其他辦法。而既然是按比例縮放,何不用實(shí)際圖像和預(yù)覽區(qū)域?qū)挾茸鞯谋壤齺?lái)計(jì)算他們關(guān)系?hmmmm… 果然 OK。實(shí)際上我們永遠(yuǎn)都只需要縮放寬度或高度中的其中一個(gè)。因?yàn)楸壤挥写蠛托》N情況。具體的,寫一個(gè)函數(shù)來(lái)實(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; // 當(dāng)圖片比預(yù)覽區(qū)域小時(shí)不做任何改變 if(w < maxWidth && h < maxHeight) return; // 當(dāng)實(shí)際圖片比例大于預(yù)覽區(qū)域?qū)捀弑壤龝r(shí) // 縮放圖片寬度,反之縮放圖片寬度 w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; };
完整的測(cè)試代碼:
<!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; // 當(dāng)圖片比預(yù)覽區(qū)域小時(shí)不做任何改變 if(w < maxWidth && h < maxHeight) return; // 當(dāng)實(shí)際圖片比例大于預(yù)覽區(qū)域?qū)捀弑壤龝r(shí) // 縮放圖片寬度,反之縮放圖片寬度 w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight; }; resizeImg(img, 500, 300); } </script> </body> </html>
JS控制圖片顯示的大?。▓D片等比例縮放)
在網(wǎng)頁(yè)中放圖片的時(shí)候我們經(jīng)常會(huì)遇到圖片變形的問(wèn)題,今天給大家分享一個(gè)等比例壓縮圖片的js,可以設(shè)置最大寬高,然后等比例自動(dòng)壓縮。
核心代碼
<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>
在對(duì)應(yīng)的img上增加onload=”AutoResizeImage(width,height,this)這句即可。
例如:
<img src="#" onload="AutoResizeImage(200,150,this)" alt="200 X 150"/>
jquery的后期更方便處理,而且頁(yè)面中不需要加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"; } });
這樣基本上就沒(méi)有問(wèn)題了
相關(guān)文章
javascript 動(dòng)態(tài)調(diào)整圖片尺寸實(shí)現(xiàn)代碼
在自己的網(wǎng)站上更新文章時(shí)一個(gè)比較常見的問(wèn)題是:文章插圖太寬,使整個(gè)網(wǎng)頁(yè)都變形了。如果對(duì)每個(gè)插圖都先進(jìn)行縮放再插入的話,太麻煩了。2009-12-12js實(shí)現(xiàn)用滾動(dòng)條來(lái)放大縮小圖片的代碼
js實(shí)現(xiàn)用滾動(dòng)條來(lái)放大縮小圖片的代碼...2007-07-07javascript圖片自動(dòng)縮放和垂直居中處理函數(shù)
非常不錯(cuò)的應(yīng)用代碼,方便我們處理一些圖片效果2008-10-10一段實(shí)現(xiàn)頁(yè)面上的圖片延時(shí)加載的js代碼
效果可以直接看淘寶的商品分類頁(yè)、還有QQ的商城頁(yè)2010-02-02javascript 不間斷的圖片滾動(dòng)并可點(diǎn)擊
不間斷的圖片滾動(dòng)效果實(shí)現(xiàn)代碼。2010-01-01純CSS實(shí)現(xiàn)的漂亮的立體圖片邊框效果,陰影代碼
純CSS 漂亮的立體圖片邊框效果,圖片陰影代碼,個(gè)人覺得這個(gè)挺實(shí)用,CSs實(shí)現(xiàn)的,定義成類,可讓你整個(gè)網(wǎng)頁(yè)上的圖片都是有立體陰影的,不錯(cuò)吧,感謝作者分享。2010-10-10javascript批量檢查當(dāng)圖片不存在時(shí)則顯示默認(rèn)圖片的代碼
批量檢查圖片地址顯示是不是有錯(cuò)誤,在ie瀏覽器中是有當(dāng)圖片不存在時(shí)的onerror事件的,下面的代碼即是非常不錯(cuò)的應(yīng)用。2008-09-09