1 學習組件Image的用法
Image是圖片組件,用來渲染展示圖片。
Image的屬性除支持通用屬性外,還支持如下屬性:
名稱 |
類型 |
默認值 |
必填 |
描述 |
src |
string |
- |
否 |
圖片的路徑,支持本地和雲端路徑,圖片格式包括png、jpg、bmp、svg和gif。 支持Base64字符串6 。格式為data:image/[png | jpeg | bmp | webp];base64, [base64 data], 其中[base64 data]為Base64字符串數據。 支持dataability://的路徑前綴,用于訪問通過data ability提供的圖片路徑,具體路徑信息詳見Data Ability說明6 。 |
alt |
string |
- |
否 |
占位圖,當指定圖片在加載中時顯示。 |
啟動DevEco Studio,新建一個項目或者打開之前的項目。這裡我們以之前創建的項目Components為例。在項目窗口中右鍵單擊pages目錄,新建一個JS Page,取名imagepage
将一張圖片複制到 entry > src > main > js > default > common > images 目錄下,例如下圖所示(可以直接把圖片拖拽過來)
在電腦上快速定位到images目錄并打開的方法是,右鍵單擊images目錄,選擇 打開于 > Explorer。
1 創建Image組件
<!-- imagepage.hml -->
<div class="container">
<image src="common/images/bird.jpg"></image>
</div>
/* imagepage.css */
.container {
flex-direction: column;
justify-content: center;
align-items: center;
}
2 設置Image樣式
Image組件除支持通用樣式外,還支持如下屬性:
名稱 |
類型 |
默認值 |
必填 |
描述 |
object-fit |
string |
cover |
否 |
設置圖片的縮放類型。可選值類型說明請見object-fit 類型說明。(不支持svg格式) |
match-text-direction |
boolean |
false |
否 |
圖片是否跟随文字方向。(不支持svg格式) |
fit-original-size |
boolean |
false |
否 |
image組件在未設置寬高的情況下是否适應圖源尺寸(該屬性為true時object-fit屬性不生效),svg類型圖源不支持該屬性。 |
object-position7 |
string |
0px 0px |
否 |
設置圖片在組件内展示的位置。 設置類型有兩種: 1. 像素,單位px,示例 15px 15px 代表X軸或者Y軸移動的位置 2. 字符,可選值:
|
object-fit 類型說明
類型 |
描述 |
cover |
保持寬高比進行縮小或者放大,使得圖片兩邊都大于或等于顯示邊界,居中顯示。 |
contain |
保持寬高比進行縮小或者放大,使得圖片完全顯示在顯示邊界内,居中顯示。 |
fill |
不保持寬高比進行放大縮小,使得圖片填充滿顯示邊界。 |
none |
保持原有尺寸進行居中顯示。 |
scale-down |
保持寬高比居中顯示,圖片縮小或者保持不變。 |
使用svg圖片資源時:
通過設置width、height和object-fit屬性定義圖片的寬、高和縮放樣式。
/* imagepage.css */
.container {
flex-direction: column;
justify-content: center;
align-items: center;
}
image {
width: 80%;
height: 500px;
border: 3px dotted red;
border-radius: 30px;
object-fit: contain;
match-text-direction: true;
}
3 顯示多張圖片
定義for循環展示多張圖片,同時定義select選擇圖片的展示方式。
<!-- imagepage.hml -->
<div class="container">
<list>
<list-item for="{{ url }}">
<image src="{{ $item }}" style="object-fit: {{ fit }};"></image>
</list-item>
</list>
<select @change="setFit">
<option for="{{ fitList }}" value="{{ $item }}">{{ $item }}</option>
</select>
</div>
/* imagepage.css */
.container {
flex-direction: column;
align-items: center;
justify-content: center;
}
list-item {
justify-content: center;
border: 2px solid blue;
}
image {
width: 300px;
height: 220px;
padding: 5px;
margin: 5px;
border: 2px solid orange;
}
select {
font-size: 40px;
width: 300px;
height: 160px;
border: 2px solid red;
margin-bottom: 20px;
}
option {
font-size: 36px;
}
// imagepage.js
export default {
data: {
url: ['common/images/bird.jpg', 'common/images/fish.jpg'],
fit: 'cover',
fitList: ['cover', 'contain', 'fill', 'none', 'scale-down']
},
setFit(e) {
this.fit = e.newValue;
}
}
4 組件Image事件
除支持通用事件外,還支持如下事件:
名稱 |
參數 |
描述 |
complete(Rich) |
{ width:width, height:height } |
圖片成功加載時觸發該回調,返回成功加載的圖源尺寸。 |
error(Rich) |
{ width:width, height:height } |
圖片加載出現異常時觸發該回調,異常時長寬為零。 |
下面來看看加載圖片的實例。本實例圖片成功加載時觸發complete事件,返回加載的圖源尺寸。加載失敗則觸發error事件,打印圖片加載失敗。
<!-- imagepage.hml -->
<div class="container">
<image src="common/images/bird.jpg" @complete="imageComplete(1)"
@error="imageError(1)"> </image>
<image src="common/images/bird1.jpg" @complete="imageComplete(2)"
@error="imageError(2)"> </image>
</div>
/* imagepage.css */
.container {
flex-direction: column;
align-items: center;
justify-content: center;
}
image {
width: 80%;
height: 200px;
align-items: center;
margin: 5px;
}
// imagepage.js
import prompt from '@system.prompt';
export default {
imageComplete(i, e) {
prompt.showToast({
message: '圖片' i '的寬度為' e.width ',圖片' i '的高度為' e.height,
duration: 3000
});
},
imageError(i, e) {
setTimeout(() => {
prompt.showToast({
message: '圖片加載失敗' i,
duration: 3000
});
}, 3000);
}
}
至此,Image組件的基本用法已經介紹完了。
最後,老規矩,敲黑闆:多動手,多思考!代碼一定要親自動手敲出來![呲牙][比心]
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!