W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵(lì)
基礎(chǔ)庫 3.30.3 開始支持,低版本需做兼容處理
解釋:打開本地相冊,相冊內(nèi)可以同時(shí)包含圖片和視頻。
Object object
屬性名 | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
count | Number | 否 | 9 | 最多可以選擇的圖片/視頻數(shù)量。 |
mode | String | 否 | single | 打開相冊后可選擇資源類型設(shè)置, 可選擇模式為: single/both; single: 打開相冊后只能選擇圖片或視頻; both: 打開相冊后,可以同時(shí)選擇圖片和視頻。 |
compressed | Boolean | 否 | true | 是否壓縮所選的視頻源文件,需要壓縮。 |
success | Function | 是 | 成功則返回圖片或視頻的本地文件路徑列表 tempFilePaths。 | |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) | |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行) |
參數(shù) | 類型 | 說明 |
---|---|---|
tempFilePaths | Array.<string> | 選擇資源(圖片或視頻)的本地文件路徑列表 。 |
tempFiles | Array.<object> | 選擇資源(圖片或視頻)本地文件列表,每一項(xiàng)是一個(gè) File 對象。 |
字段 | 類型 | 說明 |
---|---|---|
path | String | 本地文件路徑 |
size | Number | 本地文件大小(單位:B) |
type | 文件類型 | 有效值:video、image (注:基礎(chǔ)庫 3.190.3 之前在選擇資源為圖片時(shí) type 值返回 image 或 photo, 3.190.3 之后返回 image,低版本需做兼容處理) |
duration | Number | 選定視頻的時(shí)間長度 (單位:s); 開發(fā)者工具暫不支持 |
<view class="wrap">
<view class="card-area">
<video s-if="hasVideo" style="width: 100%;" id="myVideo" src="{{videoSrc}}" autoplay="true" bindended="videoEnd"></video>
<view s-else>
<view s-if="{{imageList.length > 0}}" class="image-container" style="height: {{imageList.length > 6 ? '3.54' : '2.55'}}rem;">
<image s-for="img in imageList" bindtap="{{img.type == 'video' ? 'upVideo' : 'previewImage'}}" data-src="{{img.videoSrc}}" class="image-items" style="height: {{imageList.length > 6 ? '32' : '49'}}%;" src="{{img.path}}" mode="scaleToFill"></image>
</view>
<view s-else class="display-area">
圖片/視頻顯示區(qū)
</view>
</view>
<view class="middle-area border-top border-bottom">
<view class="list-area border-bottom" hover-class="option-active">
<text class="list-item-key-4">可選媒體</text>
<picker class="list-item-value" mode="selector" value="{{sourceIndex}}" range="{{sourceArray}}" bind:change="sourceChange">
<view hover-class="hover">{{sourceArray[sourceIndex]}}</view>
</picker>
</view>
<view class="list-area border-bottom" hover-class="option-active">
<text class="list-item-key-4">是否壓縮</text>
<picker class="list-item-value" mode="selector" value="{{sizeIndex}}" range="{{sizeArray}}" bind:change="sizeChange">
<view hover-class="hover">{{sizeArray[sizeIndex]}}</view>
</picker>
</view>
<view class="list-area border-bottom" hover-class="option-active">
<text class="list-item-key-4">數(shù)量限制</text>
<picker class="list-item-value" mode="selector" value="{{countIndex}}" range="{{countArray}}" bind:change="countChange">
<view hover-class="hover">{{countArray[countIndex]}}</view>
</picker>
</view>
</view>
<view class="button-group">
<button type="primary" bindtap="selectImage">添加圖片/視頻</button>
<button type="default" bindtap="clearImage">清空</button>
</view>
</view>
</view>
Page({
data: {
sourceIndex: 1,
sourceArray: ['圖片或視頻', '圖片及視頻'],
sizeIndex: 1,
sizeArray: ['壓縮', '不壓縮'],
countIndex: 0,
countArray: [],
imageList: [],
videoSrc: '',
hasVideo: false
},
onLoad(e) {
const array = [];
for (let i = 0; i < 9; i++) {
array.push(i + 1);
}
this.setData({
countIndex: array.length - 1,
countArray: array
});
},
sourceChange(e) {
this.setData('sourceIndex', e.detail.value);
},
sizeChange(e) {
this.setData('sizeIndex', e.detail.value);
},
countChange(e) {
this.setData('countIndex', e.detail.value);
},
selectImage() {
const sourceIndex = this.data.sourceIndex;
const count = this.data.countIndex + 1;
if (sourceIndex === 1) {
const sourceType = 'both';
this.chooseImage(sourceType, count);
}
else {
const sourceType = 'single';
this.chooseImage(sourceType, count);
}
},
chooseImage(sourceType, count) {
const sizeIndex = this.data.sizeIndex;
let sizeType = [true, false];
if (sizeIndex === 0) {
sizeType = true;
}
else if (sizeIndex === 1) {
sizeType = false;
}
swan.chooseAlbum({
count: count,
mode: sourceType,
compressed: sizeType,
success: res => {
console.log('chooseAlbum success', res);
let img = '';
for (let i = 0; i < res.tempFiles.length; i++) {
if (res.tempFiles[i].type === 'video') {
res.tempFiles[i].videoSrc = res.tempFiles[i].path;
res.tempFiles[i].path = 'https://b.bdstatic.com/miniapp/image/default.png';
}
this.setData('imageList', res.tempFiles);
img = this.data.imageList;
}
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
},
videoEnd() {
this.setData({
hasVideo: false
});
},
upVideo(e) {
let src = e.currentTarget.dataset.src;
this.setData({
hasVideo: true,
videoSrc: src
});
},
clearImage() {
const imageList = this.data.imageList;
if (imageList.length > 0) {
this.setData({
imageList: [],
hasVideo: false
});
swan.showToast({
title: '清空成功',
icon: 'none'
});
}
else {
swan.showToast({title: '無可清空圖片', icon: 'none'});
}
},
previewImage(e) {
swan.showToast({title: '暫不支持預(yù)覽', icon: 'none'});
}
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: