本文实例为大家分享了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小时内与您取得联系。