微信小程式簡單封裝圖片上傳元件
希望自己 “day day up” -----小陶
我從哪裡來
在寫小程式的時候需要上傳圖片,個人覺得官方提供的 Uploader 元件不是太好用,於是乎,看了官方文件,自己封裝一個元件。
我是誰
直接上主題
在根目錄下建立components資料夾
在components下開始建立自己的元件
效果圖如下:
由於我使用的是flex佈局,所以
我從哪裡來
# wxml
<view class="images-box">
<view class="imageCount">
<text>上傳圖片:</text>
<text style="color:#909399">{{addedCount}}/{{count}}</text>
</view>
<view class="images">
<block wx:for="{{images}}" wx:key="index">
<image class="image" mode="aspectFill" src="{{item}}" bindtap="previewImage" data-index="{{index}}" bindlongpress="deleteImage"></image>
</block>
<view wx:if="{{addedCount<3}}" class="image addImageIcon" hover-class="addImageIconHover" hover-stay-time="200" bindtap="chooseImage">
<mp-icon type="field" icon="add" color="gray" size="{{40}}"></mp-icon>
</view>
</view>
</view>
# js
Component({
// 元件對外屬性
properties: {
// 圖片總數量
count: {
type: Number,
value: 3,
observers: function (newVal, oldVal) {}
},
// 圖片臨時訪問路徑集合
images: {
type: Array,
value: []
},
// 已經新增的圖片數量
addedCount: {
type: Number,
value: 0,
observers: function (newVal, oldVal) {
console.log('--new--'.newVal, '--old--', oldVal)
}
},
// 當前圖片的位置下標
currentIndex: {
type: Number,
value: 0,
}
},
// 元件內部屬性
data: {
},
// 方法
methods: {
// 選擇圖片
chooseImage() {
this.triggerEvent('chooseImage')
},
// 預覽圖片
previewImage(e) {
wx.previewImage({
urls: this.data.images,
current: this.data.images[e.currentTarget.dataset.index]
})
},
// 刪除圖片
deleteImage(e){
this.triggerEvent('deleteImage',e.currentTarget.dataset.index)
}
}
})
# wxss
.images-box {
border-radius: 10rpx;
width: 100%;
}
.imageCount {
height: 80rpx;
line-height: 80rpx;
}
.images {
height: 240rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.addImageIcon{
text-align: center;
line-height: 200rpx;
background-color: #f7f7f7;
}
.addImageIconHover{
background-color: #C0C4CC;
}
.image {
width: 30%;
border-radius: 10rpx;
height: 200rpx;
}
# json
{
"component": true,
"usingComponents":{
"mp-icon": "/miniprogram_npm/weui-miniprogram/icon/icon"
}
}
呼叫
# 父元件的 json
{
"usingComponents": {
"addImage": "../../components/addImage/addImage"
}
}
# 父元件的 wxml
<view style="width: 90%; margin-left:5%;">
<addImage count="{{count}}" images="{{images}}" addedCount="{{addedCount}}" bind:chooseImage="chooseImage" bind:deleteImage="deleteImage"></addImage>
</view>
# 父元件的 js
// pages/test/test.js
Page({
/**
* 頁面的初始資料
*/
data: {
images: [],
count: 3,
addedCount: 0
},
chooseImage() {
var that = this;
wx.chooseImage({
count: 3 - that.data.addedCount,
sizeType: ['compressed'], // 可以指定是原圖還是壓縮圖,預設二者都有
sourceType: ['album', 'camera'], // 可以指定來源是相簿還是相機,預設二者都有
success: function (res) {
// 返回選定照片的本地檔案路徑列表,tempFilePath可以作為img標籤的src屬性顯示圖片
that.setData({
images: that.data.images.concat(res.tempFilePaths),
addedCount: that.data.addedCount + res.tempFilePaths.length,
});
}
})
},
// 刪除圖片
deleteImage(e){
this.data.images.splice(e.detail,1)
this.setData({
images: this.data.images,
addedCount: this.data.addedCount - 1
})
}
})
我要到哪裡去
此程式碼只是一個很小的功能,程式碼這東西千變萬化,在不同的人手中就會綻放不同程度的光彩,我希望,有一天,我的光彩會越來越亮。