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


Posted in Javascript onAugust 18, 2020

本文实例为大家分享了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实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
初窥JQuery-Jquery简介 入门了解篇
Nov 25 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
Feb 05 Javascript
js动态给table添加/删除tr的方法
Aug 02 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
Sep 25 Javascript
JavaScript中实现sprintf、printf函数
Jan 27 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
jQuery判断指定id的对象是否存在的方法
May 22 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
详解Vue快速零配置的打包工具——parcel
Jan 16 Javascript
vue select组件的使用与禁用实现代码
Apr 10 Javascript
快速对接payjq的个人微信支付接口过程解析
Aug 15 Javascript
js删除对象中的某一个字段的方法实现
Jan 11 Javascript
JavaScript实现图片切换效果
Aug 12 #Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 #Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 #Javascript
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 #Javascript
Javascript(es2016) import和require用法和区别详解
Aug 11 #Javascript
详解Node中导入模块require和import的区别
Aug 11 #Javascript
vue实现单选和多选功能
Aug 11 #Javascript
You might like
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
PHP安全下载文件的方法
2016/04/07 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
Laravel如何自定义command命令浅析
2019/03/23 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
原生JS轮播图插件
2017/02/09 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
python操作redis的方法
2015/07/07 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
开工庆典邀请函范文
2014/01/16 职场文书
小学生环保演讲稿
2014/04/25 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
医院合作意向书范本
2015/05/08 职场文书
django 认证类配置实现
2021/11/11 Python
Vue h函数的使用详解
2022/02/18 Vue.js
分享python函数常见关键字
2022/04/26 Python