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 相关文章推荐
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
Jul 31 Javascript
JavaScript—window对象使用示例
Dec 09 Javascript
Seajs的学习笔记
Mar 04 Javascript
jQuery实现的输入框选择时间插件用法实例
Feb 28 Javascript
浅析JavaScript动画
Jun 10 Javascript
jquery Form轻松实现文件上传
May 24 jQuery
validationEngine 表单验证插件使用实例代码
Jun 15 Javascript
Angular 作用域scope的具体使用
Dec 11 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
小程序简单两栏瀑布流效果的实现
Dec 18 Javascript
前端JS获取URL参数的4种方法总结
Apr 05 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
php实现短信发送代码
2015/07/05 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
r.js来合并压缩css文件的示例
2018/04/26 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
一百行python代码将图片转成字符画
2021/02/19 Python
在python3中实现更新界面
2020/02/21 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
家长给幼儿园的表扬信
2014/01/09 职场文书
服装设计师求职信
2014/06/04 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
Python爬虫基础讲解之请求
2021/05/13 Python