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 相关文章推荐
通过Mootools 1.2来操纵HTML DOM元素
Sep 15 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
Mar 21 Javascript
ExtJs中简单的登录界面制作方法
Aug 19 Javascript
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
js 限制input只能输入数字、字母和汉字等等
Dec 18 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
jquery插件推荐 jquery.cookie
Nov 09 Javascript
用js判断是否为360浏览器的实现代码
Jan 15 Javascript
JavaScript之Vue.js【入门基础】
Dec 06 Javascript
Vue.js watch监视属性知识点总结
Nov 11 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 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
用PHP书写安全的脚本代码
2012/02/05 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
php创建sprite
2014/02/11 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
使用JavaScript保存文本文件到本地的两种方法
2019/01/22 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
Python中多线程及程序锁浅析
2015/01/21 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
python处理“
2019/06/10 Python
Python3enumrate和range对比及示例详解
2019/07/13 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
人事任命通知
2015/04/20 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
go 实现简易端口扫描的示例
2021/05/22 Golang