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 相关文章推荐
一段实时更新的时间代码
Jul 07 Javascript
jQuery实现首页图片淡入淡出效果的方法
Jun 10 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
JavaScript 冒泡排序和选择排序的实现代码
Sep 03 Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
jquery单击文字或图片内容放大并居中显示
Jun 23 jQuery
微信小程序实现动态设置页面标题的方法【附源码下载】
Nov 29 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
Jan 15 Javascript
Node.js进阶之核心模块https入门
May 23 Javascript
创建echart多个联动的示例代码
Nov 23 Javascript
vue+django实现一对一聊天功能的实例代码
Jul 17 Javascript
微信小程序input抖动问题的修复方法
Mar 03 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
vue 根据选择的月份动态展示日期对应的星期几
2021/02/06 Vue.js
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
python实现简单ftp客户端的方法
2015/06/28 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Python实现k-means算法
2018/02/23 Python
python nmap实现端口扫描器教程
2020/05/28 Python
Python ini文件常用操作方法解析
2020/04/26 Python
python实现发送邮件
2021/03/02 Python
比利时香水网上商店:NOTINO
2018/03/28 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
《再见了,亲人》教学反思
2014/02/26 职场文书
美术学专业求职信
2014/07/23 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
手术室护士个人总结
2015/02/13 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
法制主题班会教案
2015/08/13 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
Python制作动态字符画的源码
2021/08/04 Python