全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

vue实现移动端图片裁剪上传功能

本文实例为大家分享了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.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue移动端图片裁剪上传  # vue移动端图片裁剪  # vue图片裁剪上传  # vue+element实现图片上传及裁剪功能  # vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能  # Vue-cropper 图片裁剪的基本原理及思路讲解  # vue移动端裁剪图片结合插件Cropper的使用实例代码  # 详解vue项目中实现图片裁剪功能  # 基于Vue的移动端图片裁剪组件功能  # cropper js基于vue的图片裁剪上传功能的实现代码  # vue-image-crop基于Vue的移动端图片裁剪组件示例  # vue.js 实现图片本地预览 裁剪 压缩 上传功能  # vue-cropper实现裁剪图片  # 上传  # 请大家  # 大家分享  # 回调  # 上传图片  # 具体内容  # 大家多多  # 上传文件  # css  # min  # Cropper  # dist  # initParam  # Object  # props  # export  # default  # cancelHandle  # confirm  # header 


相关文章: PHP正则匹配日期和时间(时间戳转换)的实例代码  建站主机功能解析:服务器选择与快速搭建指南  宝塔新建站点为何无法访问?如何排查?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何快速搭建FTP站点实现文件共享?  如何在建站之星网店版论坛获取技术支持?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  北京的网站制作公司有哪些,哪个视频网站最好?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  如何用西部建站助手快速创建专业网站?  建站之星如何助力网站排名飙升?揭秘高效技巧  如何在云指建站中生成FTP站点?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  网站微信制作软件,如何制作微信链接?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  家庭服务器如何搭建个人网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  网站制作服务平台,有什么网站可以发布本地服务信息?  C#怎么创建控制台应用 C# Console App项目创建方法  如何选择高效稳定的ISP建站解决方案?  建站之星×万网:智能建站系统+自助建站平台一键生成  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  香港服务器部署网站为何提示未备案?  如何通过IIS搭建网站并配置访问权限?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  广州美橙建站如何快速搭建多端合一网站?  如何在阿里云香港服务器快速搭建网站?  建站之星logo尺寸如何设置最合适?  如何续费美橙建站之星域名及服务?  如何选择CMS系统实现快速建站与SEO优化?  如何通过智能用户系统一键生成高效建站方案?  如何通过虚拟主机快速搭建个人网站?  招贴海报怎么做,什么是海报招贴?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Swift开发中switch语句值绑定模式  如何解决ASP生成WAP建站中文乱码问题?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在阿里云通过域名搭建网站?  ppt制作免费网站有哪些,ppt模板免费下载网站?  如何通过VPS建站无需域名直接访问?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。