vue实现移动端图片裁剪上传功能

作者:echo008 时间:2024-05-10 14:15:04 

本文实例为大家分享了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.示例图

vue实现移动端图片裁剪上传功能

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

来源:http://blog.csdn.net/echo008/article/details/77099485

标签:vue,移动端,裁剪,上传
0
投稿

猜你喜欢

  • Python手机号码归属地查询代码

    2021-05-02 05:00:30
  • Python命令启动Web服务器实例详解

    2022-10-09 11:53:42
  • python 下划线的不同用法

    2021-01-20 16:55:13
  • python文件编译为pyc后运行的实现步骤

    2021-03-08 22:36:46
  • SQL Server 2005 内置工具建审查系统

    2009-01-19 14:24:00
  • JavaScript,5种调用函数的方法[译]

    2009-02-24 16:26:00
  • 使用DW中遇到的常见问题详解

    2008-03-18 16:27:00
  • javascript 日期相减-在线教程(附代码)

    2024-04-18 09:45:00
  • Vue3中watch的使用详解

    2024-05-09 15:20:19
  • 全面阐述overflow:hidden属性

    2008-08-18 13:30:00
  • 详解Python 正则表达式模块

    2022-03-26 21:26:34
  • 使用matplotlib画散点图的方法

    2022-07-30 20:49:54
  • Pycharm 2to3配置,python2转python3方式

    2021-07-05 21:39:50
  • Python 通过爬虫实现GitHub网页的模拟登录的示例代码

    2022-04-27 00:26:39
  • 对YOLOv3模型调用时候的python接口详解

    2023-05-31 00:58:57
  • VBScript中LBound函数和UBound函数的用法

    2008-06-27 13:02:00
  • Python matplotlib画图实例之绘制拥有彩条的图表

    2023-01-26 02:06:25
  • TypeScript类型检查详谈及火爆原因

    2022-01-24 11:48:41
  • 中国移动G3笔记本全Flash 网站

    2009-04-27 12:51:00
  • SQL提供的进行数据传输的实用程序—BCP

    2009-01-23 13:45:00
  • asp之家 网络编程 m.aspxhome.com