JS網(wǎng)頁(yè)圖片按比例自適應(yīng)縮放實(shí)現(xiàn)方法
用戶上傳照片,照片的尺寸未知;需要生成一個(gè)預(yù)覽,這個(gè)預(yù)覽圖要根據(jù)提供給用戶預(yù)覽的區(qū)域自應(yīng)用,并且居中;如果圖片太大,需要按比例縮放。如下圖。

瞄了一下,居中可以用 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;
相關(guān)文章
除Console.log()外更多的Javascript調(diào)試命令
本篇文章給大家介紹了除Console.log()外更多的Javascript調(diào)試命令,方便大家更多環(huán)境下的JS調(diào)試,學(xué)習(xí)下吧。2018-01-01
js實(shí)現(xiàn)模擬計(jì)算器退格鍵刪除文字效果的方法
這篇文章主要介紹了js實(shí)現(xiàn)模擬計(jì)算器退格鍵刪除文字效果的方法,涉及javascript字符串截取操作的相關(guān)技巧,需要的朋友可以參考下2015-05-05
小程序獲取手機(jī)驗(yàn)證碼倒計(jì)時(shí)的方法
這篇文章主要為大家詳細(xì)介紹了小程序獲取手機(jī)驗(yàn)證碼倒計(jì)時(shí)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>2022-08-08
js用Date對(duì)象的setDate()函數(shù)對(duì)日期進(jìn)行加減操作
在某個(gè)日期上加減天數(shù)來(lái)說(shuō),其實(shí)只要調(diào)用Date對(duì)象的setDate()函數(shù)就可以了,具體方法如下2014-09-09
JS實(shí)現(xiàn)的簡(jiǎn)單輪播圖運(yùn)動(dòng)效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)的簡(jiǎn)單輪播圖運(yùn)動(dòng)效果,結(jié)合完整實(shí)例形式分析了javascript基于定時(shí)器動(dòng)態(tài)修改頁(yè)面元素屬性的相關(guān)操作技巧,需要的朋友可以參考下2016-12-12
無(wú)縫滾動(dòng)改進(jìn)版支持上下左右滾動(dòng)(封裝成函數(shù))
無(wú)縫滾動(dòng)改進(jìn)版,封裝成函數(shù),同時(shí)支持上下左右無(wú)縫滾動(dòng)。2012-12-12

