關於圖片按比例自適應縮放的js代碼

來源:互聯網
上載者:User

如。

瞄了一下,置中可以用 text-align:center; 來實現。而按比例縮放,利用預設 <img /> 的 width 、height 屬性解決不了。因為使用者圖片可能是很長的,也可能是很寬的。線上上想了一下他們的關係,按條件來判斷是這樣的:
複製代碼 代碼如下:
if(實際寬度 > 預覽最大寬度) {
縮放寬度 = 預覽最大寬度
}

if(實際高度 > 預覽最大高度) {
縮放高度 = 預覽最大高度
}

但是這樣會有問題,比如當寬度和高度都被縮放,如果縮放比較不同,圖片就不是按比例縮放,會變得非常醜。為了讓它按比例縮放,就需要做各種判斷了。那這樣就違背了我們希望程式自動化的原則了。再想想,雖然不喜歡數學,但數學還是很好用的,應該有其他辦法。而既然是按比例縮放,何不用實際映像和預覽地區寬度作的比例來計算他們關係?hmmmm… 果然 OK。實際上我們永遠都只需要縮放寬度或高度中的其中一個。因為比例只有大和小種情況。具體的,寫一個函數來實現它吧:
複製代碼 代碼如下:
/**
* 圖片按比例自適應縮放
* @param img {Element} 使用者上傳的圖片
* @param maxWidth {Number} 預覽地區的最大寬度
* @param maxHeight {Number} 預覽地區的最大高度
*/

var resizeImg = function(img, maxWidth, maxHeight){
var w = img.width,
h = img.height;

// 當圖片比預覽地區小時不做任何改變
if(w < maxWidth && h < maxHeight) return;

// 當實際圖片比例大於預覽地區寬高比例時
// 縮放圖片寬度,反之縮放圖片寬度
w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight;
};

完整的測試代碼:
複製代碼 代碼如下:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>圖片按比例自適應縮放</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.bkjia.com/uploads/allimg/131017/01154AG0-1.jpg" alt="alipay" />
<br />
<a href="http://www.bkjia.com/uploads/allimg/131017/01154AG0-1.jpg" rel="nofollow">查看原圖</a> || <a href="http://sofish.de/1679" title="關於圖片按比例自適應縮放">返迴文章:關於圖片按比例自適應縮放 »</a>
</div>
<script>
window.onload = function() {
var img = document.getElementById('img'),
/**
* 圖片按比例自適應縮放
* @param img {Element} 使用者上傳的圖片
* @param maxWidth {Number} 預覽地區的最大寬度
* @param maxHeight {Number} 預覽地區的最大高度
*/
resizeImg = function(img, maxWidth, maxHeight){
var w = img.width,
h = img.height;
// 當圖片比預覽地區小時不做任何改變
if(w < maxWidth && h < maxHeight) return;
// 當實際圖片比例大於預覽地區寬高比例時
// 縮放圖片寬度,反之縮放圖片寬度
w/h > maxWidth/maxHeight ? img.width = maxWidth : img.height = maxHeight;
};
resizeImg(img, 500, 300);
}
</script>
</body>
</html>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.