微信小程序的組件和普通的 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
裁剪模式,不縮放圖片,只顯示圖片的右下邊區域。