国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue實現移動端圖片裁剪上傳功能

2019-11-19 15:49:39
字體:
來源:轉載
供稿:網友

本文實例為大家分享了vue移動端圖片裁剪上傳的具體代碼,供大家參考,具體內容如下

1. 安裝cropperjs依賴庫

npm install cropperjs

2. 編寫組件SimpleCropper.vue

<template>  <div class="v-simple-cropper">  <slot>   <button @click="upload">上傳圖片</button>  </slot>  <input class="file" ref="file" type="file" accept="image/*" @change="uploadChange">  <div class="v-cropper-layer" ref="layer">   <div class="layer-header">   <button class="cancel" @click="cancelHandle">取消</button>   <button class="confirm" @click="confirmHandle">裁剪</button>   </div>   <img ref="cropperImg">  </div>  </div> </template>  <script> import Cropper from 'cropperjs' import 'cropperjs/dist/cropper.min.css' export default {  name: 'v-simple-cropper',  props: {  initParam: Object,  successCallback: {   type: Function,   default: () => {}  }  },  data () {  return {   cropper: {},   filename: ''  }  },  mounted () {  this.init()  },  methods: {  // 初始化裁剪插件  init () {   let cropperImg = this.$refs['cropperImg']   this.cropper = new Cropper(cropperImg, {   aspectRatio: 1 / 1,   dragMode: 'move'   })  },  // 點擊上傳按鈕  upload () {   this.$refs['file'].click()  },  // 選擇上傳文件  uploadChange (e) {   let file = e.target.files[0]   this.filename = file['name']   let URL = window.URL || window.webkitURL   this.$refs['layer'].style.display = 'block'   this.cropper.replace(URL.createObjectURL(file))  },  // 取消上傳  cancelHandle () {   this.cropper.reset()   this.$refs['layer'].style.display = 'none'   this.$refs['file'].value = ''  },  // 確定上傳  confirmHandle () {   let cropBox = this.cropper.getCropBoxData()   let scale = this.initParam['scale'] || 1   let cropCanvas = this.cropper.getCroppedCanvas({   width: cropBox.width * scale,   height: cropBox.height * scale   })   let imgData = cropCanvas.toDataURL('image/jpeg')   let formData = new window.FormData()   formData.append('fileType', this.initParam['fileType'])   formData.append('img', imgData)   formData.append('signId', this.$localStorage('signId'))   formData.append('originalFilename', this.filename)   window.$axios(this.initParam['uploadURL'], formData, {   method: 'post',   headers: {'Content-Type': 'multipart/form-data'}   }).then(res => {   this.successCallback(res.data)   this.cancelHandle()   })  }  } } </script>  <style lang="less"> .v-simple-cropper {  .file {  display: none;  }  .v-cropper-layer {  position: fixed;  top: 0;  bottom: 0;  left: 0;  right: 0;  background: #fff;  z-index: 99999;  display: none;  .layer-header {   position: absolute;   top: 0;   left: 0;   z-index: 99999;   background: #fff;   width: 100%;   height: .8rem;   padding: 0 .2rem;   box-sizing: border-box;  }  .cancel,  .confirm {   line-height: .8rem;   font-size: .28rem;   background: inherit;   border: 0;   outline: 0;   float: left;  }  .confirm {   float: right;  }  img {   position: inherit!important;   border-radius: inherit!important;   float: inherit!important;  }  } } </style> 

3. 引用組件

<template>  <simple-cropper :initParam="uploadParam" :successCallback="uploadHandle" ref="cropper">  <img :src="userImg" @click="upload">  </simple-cropper> </template>  <script> import SimpleCropper from '@/components/SimpleCropper' export default {  name: 'info',  data () {  return {   uploadParam: {   fileType: 'recruit', // 其他上傳參數   uploadURL: this.$dataURL + 'uploadAction/qcloudImg', // 上傳地址   scale: 4 // 相對手機屏幕放大的倍數: 4倍   },   userImg: this.$dataURL + 'test.png'  }  },  methods: {  // 上傳頭像  upload () {   this.$refs['cropper'].upload()  },  // 上傳頭像成功回調  uploadHandle (data) {   if (data.state === 'SUCCESS') {   this.userImg = this.form.headImgUrl = data.fileId   }  }  },  components: {  SimpleCropper  } } </script> 

4. 示例圖

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 合川市| 客服| 闻喜县| 乐至县| 清河县| 阜宁县| 辰溪县| 景宁| 南宫市| 鄂尔多斯市| 漯河市| 湘乡市| 黔江区| 武义县| 临城县| 汾阳市| 屏南县| 洛浦县| 旺苍县| 武隆县| 双城市| 普宁市| 沁水县| 安庆市| 兴业县| 布拖县| 兴宁市| 城市| 白山市| 呼伦贝尔市| 临邑县| 南溪县| 汉阴县| 贵港市| 葵青区| 黄浦区| 青冈县| 汝城县| 青州市| 舒城县| 泾源县|