微信小程序簡單封裝圖片上傳組件


微信小程序簡單封裝圖片上傳組件

希望自己 “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
    })
  }
})

我要到哪里去

此代碼只是一個很小的功能,代碼這東西千變萬化,在不同的人手中就會綻放不同程度的光彩,我希望,有一天,我的光彩會越來越亮。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM