1. 程式人生 > 其它 >uni-app&微信小程式圖片元件的等比例縮放和自適應裁切顯示

uni-app&微信小程式圖片元件的等比例縮放和自適應裁切顯示

微信小程式的元件和普通的 HTML 有所不同,比如 HTML 的 div 在小程式裡面是 view ,HTML 的 span 在小程式裡是 text

因為 uni-app 要相容多終端和各種小程式,所以它的語法和微信小程式是基本一致的。

今天就整理一下小程式的圖片元件(image)的縮放和裁切顯示實現,下面以 uni-app 為例。

如果在頁面中增加一個 <image />標籤,不設定任何樣式的話,它會佔據很大一塊空間。檢視 uni-app 原始碼可以發現,圖片元件有一個 320px 的寬度和 240px 的高度。

/* CSS */
uni-image {
    width: 320px;
    height: 240px;
    display: inline-block;
    overflow: hidden;
    position: relative
}

這樣,如果只給圖片設定寬度或者高度的話,會導致圖片被拉伸。

一般給 image 設定大小的時候要同時指定寬度和高度:

/* CSS */
.image {
    width: 150px;
    height: 150px;
}

如果圖片的長度和寬度不固定,可以設定寬度(或高度),然後高度(或寬度)自適應:

/* CSS */
.image {
    width: 150px;
    height: auto;
}

但如果一個列表中的圖片大小不一,就比較麻煩。不過不用擔心,微信小程式為 image 元件提供了一個 mode 屬性。

mode 屬性不僅可以讓圖片等比例縮放,還可以自動裁切,按照意願進行顯示。

比如等比例顯示,我們可以給圖片設定一個寬度,然後設定 mode="widthFix" ,這樣圖片也不會被拉伸:

<!-- HTML -->
<image class="image" mode="widthFix" />

/* CSS */
.image {
    width: 150px;
}

比如使用者頭像,圖片的寬高是固定的,圖片如果比較長,可以使用mode="aspectFill"等比例縮放,自動裁剪短邊填充:

<!-- HTML -->
<image class="image" mode="aspectFill" />

/* CSS */
.image {
    width: 150px;
    height: 150px;
}

這樣即可以按照尺寸顯示圖片,又不會被拉伸了。

image 元件的 mode 屬性還有很多引數,使用起來非常靈活:

scaleToFill 縮放模式,不保持縱橫比縮放圖片,使圖片的寬高完全拉伸至填滿 image 元素。

aspectFit縮放模式,保持縱橫比縮放圖片,使圖片的長邊能完全顯示出來。也就是說,可以完整地將圖片顯示出來。

aspectFill 縮放模式,保持縱橫比縮放圖片,只保證圖片的短邊能完全顯示出來。也就是說,圖片通常只在水平或垂直方向是完整的,另一個方向將會發生擷取。

widthFix 縮放模式,寬度不變,高度自動變化,保持原圖寬高比不變。

heightFix 縮放模式,高度不變,寬度自動變化,保持原圖寬高比不變。

top 裁剪模式,不縮放圖片,只顯示圖片的頂部區域。

bottom 裁剪模式,不縮放圖片,只顯示圖片的底部區域。

center 裁剪模式,不縮放圖片,只顯示圖片的中間區域。

left 裁剪模式,不縮放圖片,只顯示圖片的左邊區域。

right 裁剪模式,不縮放圖片,只顯示圖片的右邊區域。

top left 裁剪模式,不縮放圖片,只顯示圖片的左上邊區域。

top right 裁剪模式,不縮放圖片,只顯示圖片的右上邊區域。

bottom left 裁剪模式,不縮放圖片,只顯示圖片的左下邊區域。

bottom right 裁剪模式,不縮放圖片,只顯示圖片的右下邊區域。