cropper js基于vue的图片裁剪上传功能的实现代码


Posted in Javascript onMarch 01, 2018

前些日子做了一个项目关于vue项目需要头像裁剪上传功能,看了一篇文章,在此基础上做的修改完成了这个功能,与大家分享一下。原文:https://3water.com/article/135719.htm

首先下载引入cropper js,

npm install cropper js --save

在需要的页面引入:import Cropper from "cropper js"

html的代码如下:

<template> 
 <div id="demo"> 
 <!-- 遮罩层 --> 
 <div class="container" v-show="panel"> 
 <div> 
  <img id="image" :src="url" alt="Picture"> 
 </div> 
 <button type="button" id="button" @click="commit">确定</button> 
 <button type="button"id="cancel" @click="cancel">取消</button> 
 </div> 
 <div style="padding:20px;"> 
 <div class="show"> 
  <div class="picture" :style="'backgroundImage:url('+headerImage+')'"> 
  </div> 
 </div> 
 <div style="margin-top:20px;text-align: left;"> 
  <input type="file" id="change" accept="image" @change="change"> 
  <label for="change"></label> 
 </div> 
 </div> 
 </div> 
</template>

主要是js代码,如下

1,data里面定好初始变量,绑定数据,imgCropperData是我定义的判断图片格式的。

data() { 
 return { 
 headerImage: "", 
 picValue: "", 
 cropper: "", 
 croppable: false, 
 panel: false, 
 url: "", 
 imgCropperData: { 
 accept: "image/gif, image/jpeg, image/png, image/jpg" 
 } 
 }; 
 }

2,在mounted里面初始换裁剪框

mounted() { 
 //初始化这个裁剪框 
 var self = this; 
 var image = document.getElementById("image"); 
 this.cropper = new Cropper(image, { 
 aspectRatio: 1, 
 viewMode: 1, 
 background: false, 
 zoomable: false, 
 ready: function() { 
 self.croppable = true; 
 } 
 }); 
 }

3.methods的方法比较多,包括创建URL路径,input框change事件,canvas画图,确定提交上传。我还加了取消事件函数,判断上传文件的类型和大小。

methods: { 
 //取消上传 
 cancel() { 
 this.panel = false; 
 var obj = document.getElementById('change') ; 
 obj.outerHTML=obj.outerHTML; 
 }, 
 //创建url路径 
 getObjectURL(file) { 
 var url = null; 
 if (window.createObjectURL != undefined) { 
 // basic 
 url = window.createObjectURL(file); 
 } else if (window.URL != undefined) { 
 // mozilla(firefox) 
 url = window.URL.createObjectURL(file); 
 } else if (window.webkitURL != undefined) { 
 // webkit or chrome 
 url = window.webkitURL.createObjectURL(file); 
 } 
 return url; 
 }, 
 //input框change事件,获取到上传的文件 
 change(e) { 
 let files = e.target.files || e.dataTransfer.files; 
 if (!files.length) return; 
 let type = files[0].type; //文件的类型,判断是否是图片 
 let size = files[0].size; //文件的大小,判断图片的大小 
 if (this.imgCropperData.accept.indexOf(type) == -1) { 
 alert("请选择我们支持的图片格式!"); 
 return false; 
 } 
 if (size > 5242880) { 
 alert("请选择5M以内的图片!"); 
 return false; 
 } 
 this.picValue = files[0]; 
 this.url = this.getObjectURL(this.picValue); 
 //每次替换图片要重新得到新的url 
 if (this.cropper) { 
 this.cropper.replace(this.url); 
 } 
 this.panel = true; 
 }, 
 //确定提交 
 commit() { 
 this.panel = false; 
 var croppedCanvas; 
 var roundedCanvas; 
 if (!this.croppable) { 
 return; 
 } 
 // Crop 
 croppedCanvas = this.cropper.getCroppedCanvas(); 
 // Round 
 roundedCanvas = this.getRoundedCanvas(croppedCanvas); 
 this.headerImage = roundedCanvas.toDataURL(); 
 //上传图片 
 this.postImg(); 
 }, 
 //canvas画图 
 getRoundedCanvas(sourceCanvas) { 
 var canvas = document.createElement("canvas"); 
 var context = canvas.getContext("2d"); 
 var width = sourceCanvas.width; 
 var height = sourceCanvas.height; 
 canvas.width = width; 
 canvas.height = height; 
 context.imageSmoothingEnabled = true; 
 context.drawImage(sourceCanvas, 0, 0, width, height); 
 context.globalCompositeOperation = "destination-in"; 
 context.beginPath(); 
 context.arc( 
 width / 2, 
 height / 2, 
 Math.min(width, height) / 2, 
 0, 
 2 * Math.PI, 
 true 
 ); 
 context.fill(); 
 return canvas; 
 }, 
 //提交上传函数 
 postImg() { 
 alert("上传成功"); 
 //这边写图片的上传 
 } 
 }

css样式代码就不贴出来了,可以到GitHub上下载https://github.com/leileibrother/cropper-js-vue-。

总结

以上所述是小编给大家介绍的cropper js基于vue的图片裁剪上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 常用关键字列表集合
Dec 04 Javascript
在JavaScript中typeof的用途介绍
Apr 11 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
Apr 29 Javascript
Node.js DES加密的简单实现
Jul 07 Javascript
easyui导出excel无法弹出下载框的快速解决方法
Nov 10 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
Jan 04 Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 Javascript
JS实现动态添加外部js、css到head标签的方法
Jun 05 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 Javascript
使用eslint和githooks统一前端风格的技巧
Jul 29 Javascript
js实现拖拽与碰撞检测
Sep 18 Javascript
Vuex中mutations与actions的区别详解
Mar 01 #Javascript
vue 实现剪裁图片并上传服务器功能
Mar 01 #Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 #Javascript
详解Immutable及 React 中实践
Mar 01 #Javascript
解决VUEX兼容IE上的报错问题
Mar 01 #Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 #Javascript
基于Vuex无法观察到值变化的解决方法
Mar 01 #Javascript
You might like
10条PHP编程习惯助你找工作
2008/09/29 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
常用PHP封装分页工具类
2017/01/14 PHP
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python生成指定尺寸缩略图的示例
2014/05/07 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
python实现指定ip端口扫描方式
2019/12/17 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
优秀纪检干部材料
2014/08/27 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
作风建设年度心得体会
2014/10/29 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书