微信小程序 实现上传图片功能

1、制作一个微信上传图片的功能

<!-- index.wxml -->
<view class="con">
    <text class="title">上传照片</text>

    <view class="img_list">
        <block wx:for="{{imgList}}" wx:key="index">
          <view class="item_img"> 
            <image src="{{item}}" class="img_item" mode="aspectFill" catchtap="previewImg"  data-src="{{item}}" ></image>
            <image src="../../assets/img/close1.png" class="close" catchtap="deleteUpload" data-index="{{index}} "></image>
          </view>
        </block>

        <view class="item_img1 flex-column" catchtap="chooseImg"  wx:if="{{show}}">
          <image src="../../assets/img/good_cart03.png" class="add_img" mode="aspectFill"></image>
          <text>{{imgList.length}}/{{maxPhoto}}</text>
        </view>

    </view>

</view> 

 

index.wxss

.con {
  margin: 0 20rpx;
}

.title {
  padding-left: 31rpx;
  font-size: 28rpx;
  font-weight: bold;
  color: #333333;
}


.img_list {
  display: flex;
  flex-wrap: wrap;
  margin-top: 24rpx;
}

.item_img {
  width: 220rpx;
  height: 220rpx;
  margin-right: 23rpx;
  margin-bottom: 23rpx;
  position: relative;
  /* border: 1px solid #ccc; */
}

.img_item {
  width: 220rpx;
  height: 220rpx;
}

.item_img:nth-child(3n) {
  margin-right: 0;
}

.item_img1 {
  width: 220rpx;
  height: 220rpx;
  margin-bottom: 23rpx;
  border: 1px solid #ccc;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.item_img1 text {
  font-size: 26rpx;
  /* font-weight: bold; */
  color: #999999;
}

.add_img {
  width: 60rpx;
  height: 60rpx;
  margin-bottom: 30rpx;
}

.close {
  width: 30rpx;
  height: 30rpx;
  position: absolute;
  top: -15rpx;
  right: -15rpx;
}

index.js

// pages/photoDoor/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    show: true, //显示选择图片的按钮
    imgList: [

    ],
    maxPhoto: 10, //最大上传10张图片
  },


  onLoad: function (options) {},

  onShow: function () {
    
  },
  /**
   * 选择上传方式
   * @param {*} e 
   */
  chooseImg(e) {
    if (this.NextTap) {
      return;
    }
    this.NextTap = true;
    setTimeout(() => {
      this.NextTap = false;
    }, 1500) //1.5秒之后可以再次点击,防止用户重复点击
    wx.showActionSheet({
      itemList: ['从相册中选择', '拍照'],
      success: (res) => {
        if (!res.cancel) {
          if (res.tapIndex == 0) {
            this.chooseWxImage('album') //相册
          } else if (res.tapIndex == 1) {
            this.chooseWxImage('camera') //拍照
          }
        }
      }
    })
  },
  /**
   * 上传照片
   * @param {*} type 
   */
  chooseWxImage: function (type) {
    let {  imgList, maxPhoto } = this.data
    if (imgList.length > 10) {
      wx.showToast({
        title: '最多上传10张',
        icon: 'none',
        duration: 2000
      })
      return
    }
    wx.chooseImage({

      count: maxPhoto - imgList.length, // 最多可以选择多少张图片
      sizeType: ['original', 'compressed'], //所选的图片的尺寸
      sourceType: [type], //图片来源
      success: (res) => {
        console.log(res)
        let tempFilePaths = res.tempFilePaths //成功后返回的的路径
        console.log(tempFilePaths)
        //把图片对应的路径都追加到数组中
        tempFilePaths.forEach(item => {
          imgList.push(item)
        })
        this.setData({
          imgList: imgList,
          show: imgList.length >= 10 ? false : true
        })
      }
    })
  },
  /*
   * 图片预览
   * @param e
   */
  previewImg(e) {
    let currentUrl = e.currentTarget.dataset.src;
    let urls = this.data.imgList
    wx.previewImage({
      current: currentUrl, // 当前显示图片的http链接
      urls: urls // 需要预览的图片http链接列表
    })
  },
  /**
   * 删除上传的图片
   * @param e
   */
  deleteUpload(e) {
    console.log(e)
    let {index} = e.currentTarget.dataset;
 
    let {imgList} = this.data;
    imgList.splice(index, 1)
    this.setData({
      imgList: imgList,
      show: imgList.length >= 10 ? false : true
    })
  }

})

2、效果图如下:

 

posted @ 2021-08-31 18:31  凌晨的粥  阅读(826)  评论(1编辑  收藏  举报