vue实现移动端图片裁剪上传功能
作者:echo008 发布时间:2024-05-10 14:15:04
标签:vue,移动端,裁剪,上传
本文实例为大家分享了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.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。
更多vue学习教程请阅读专题《vue实战教程》
来源:http://blog.csdn.net/echo008/article/details/77099485


猜你喜欢
- 运行结果(2020-2-4日数据)数据来源news.qq.com/zt2020/page/feiyan.htm抓包分析日报数据格式"
- 推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例;如下是效果图:这个拖箱子游戏做了移
- 白天总是玩着不看书,这两晚却很神奇地因为睡不着起来看书,正则表达式。很好玩的东西。《Javascript 高级程序设计》是本好书,写得很系统
- 首先我们知道python通过pip安装,那么我们安装的所有东西都会在我们pip下的配置目录下,这会显得非常臃肿,同样也让我们部署艰难。pyt
- 记得刚学python那会,作过一个飞机大战小项目,这个项目非常经典,可以帮助初学者提高动手能力,今天把它分享出来。一、项目介绍先放几张图片二
- 如下所示:# 创建一个空的 DataFramedf_empty = pd.DataFrame()#或者df_empty = pd.DataF
- 本文实例为大家分享了微信小程序实现简单计算器与秒表的具体代码,供大家参考,具体内容如下实验内容:任务一:实现一个简单的加减乘除运算。首先输入
- batch的lstm# 导入相应的包import torchimport torch.nn as nnimport torch.nn.fun
- COOKIE函数库:cookie.inc.php3 <?php if (!isset($__cookie_inc__)){ $__co
- 在进行数据库的查询时,会经常遇到这样的情况:例如想在一个用户数据库中查询他的用户名和他的密码,但恰好该用户使用的名字和密码中有特殊的字符,例
- 1、get方法请求接口url:显而易见,就是接口的地址url啦headers:请求头,例如:content-type = applicati
- 使用python删除excel表格重复行。# 导入pandas包并重命名为pdimport pandas as pd# 读取Excel中Sh
- 本篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行。注意!虽然这是
- 1.matplotlib简介matplotlib 库是 Python 中绘制二维和三维图表的数据可视化工具特点: &
- Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元
- 在这家公司一个项目, 需要添加英文版本,就是中英文化了,直接上代码1.首先是main.js页面做配置import VueI18n from
- 一、概述OLAP的系统(即Online Aanalyse Process)一般用于系统决策使用。通常和数据仓库、数据分析、数据挖掘等概念联系
- 如何在 git 中取消 pycache 文件如果使用 PyCharm 运行代码,会在 Python 脚本所在目录生成 __pycache__
- 本文列出了初学网页编程中常用到的一些代码和一些技巧,简单实用,您一定用得到。1、oncontextmenu="window.eve
- 保存为.py文件后 运行脚本在后面添加进程名称即可 比如:python proinfo.py qq 即可获取QQ的进程信息,注意不区分大小写