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的实现简单的表格中增加或删除下一行
Aug 01 Javascript
javaScript 利用闭包模拟对象的私有属性
Dec 29 Javascript
jquery图片不完全按比例自动缩小的简单代码
Jul 29 Javascript
详解JS 比较两个Json对象的值是否相等的实例
Nov 20 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
Dec 30 Javascript
JavaScript简单实现鼠标拖动选择功能
Mar 06 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
Mar 26 Javascript
js检测iframe是否加载完成的方法
Nov 26 Javascript
ionic环境配置及问题详解
Jun 27 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
自己动手封装一个React Native多级联动
Sep 19 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 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简单判断手机设备的方法
2016/08/23 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
Python的argparse库使用详解
2018/10/09 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
整改报告格式
2014/11/06 职场文书
2014年统计工作总结
2014/11/21 职场文书
安全守法证明
2015/06/23 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA