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 ajax serialize()方法的使用以及常见问题解决
Jan 27 Javascript
ajax请求get与post的区别总结
Nov 04 Javascript
Javascript中实现String.startsWith和endsWith方法
Jun 10 Javascript
jQuery插件passwordStrength密码强度指标详解
Jun 24 Javascript
JavaScript之Vue.js【入门基础】
Dec 06 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
Dec 08 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
js封装成插件_Canvas统计图插件编写实例
Sep 12 Javascript
微信小程序实现单选功能
Oct 30 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
使用vue制作滑动标签
Sep 21 Javascript
Vue Element UI自定义描述列表组件
May 18 Vue.js
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
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python实现图片转字符画的示例
2017/08/22 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
爱游人:Travelliker
2017/09/05 全球购物
化工机械应届生求职信
2013/11/04 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
小松树教学反思
2014/02/11 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
物流业务员岗位职责
2015/04/03 职场文书
百年校庆感言
2015/08/01 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript