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 confirm选择判断
Oct 18 Javascript
jQuery 中使用JSON的实现代码
Dec 01 Javascript
JS delegate与live浅析
Dec 21 Javascript
倒记时60刷新网页的js代码
Feb 18 Javascript
使用npm发布Node.JS程序包教程
Mar 02 Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 Javascript
JavaScript中boolean类型之三种情景实例代码
Nov 21 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
vue里面使用mui的弹出日期选择插件实例
Sep 16 Javascript
vue中get请求如何传递数组参数的方法示例
Nov 08 Javascript
es6数组includes()用法实例分析
Apr 18 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
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python中requests库session对象的妙用详解
2017/10/30 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
使用Python写一个小游戏
2018/04/02 Python
django settings.py 配置文件及介绍
2019/07/15 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
开展读书活动总结
2014/06/30 职场文书
庆国庆活动总结
2014/08/28 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
创业计划书之家教托管
2019/09/25 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python