效果演示

github的cropperjs文档仓库地址:https://github.com/fengyuanchen/cropperjs

安装cropperjs

npm install cropperjs

使用cropperjs

html

1. 使用label的for属性和input进行绑定,实现点击label中的内容,相当于点击了input,达到上次图片功能
2. input的属性hidden相当于display:none
3. @change="onFileChange"是input本身支持的图片改变事件

<template><div class="setting-container"><div class="avatar"><!-- 使用for和input表单元素进行绑定 --><label for="file"><el-avatar shape="square":size="100"fit="cover":src="previewImage"></el-avatar><p>点击修改头像</p></label><!-- 上传图片 hidden相当于display:none --><!-- @change="onFileChange"是input本身支持的图片改变事件 --><input type="file"id="file"@change="onFileChange"ref="fileRef"hidden /></div><!-- 预览上传头像对话框 --><el-dialog title="修改头像"append-to-body@opened="onDialogOpend":visible.sync="dialogVisible"><div class="preview-image-warp"><img class="preview-image":src="previewImage"alt=""ref="previewImage"srcset=""></div><span slot="footer"class="dialog-footer"><el-button @click="dialogVisible = false">取 消</el-button><el-button type="primary"@click="onUpdataPhoto">确 定</el-button></span></el-dialog></div>
</template>

style

1. 修改cropperjs需要的样式

<style lang='less' scoped>
// 参考图片剪切文档,配置样式
.preview-image-warp {.preview-image {display: block;max-width: 100%;height: 300px;}
}
</style>

js

1. objectURL=windows.URL.createObjectURL(blod);blod 参数是File对象或者是Blod对象
2. file.files[0] 获得上传图片的file对象,通过window.URL.createObjectURL()方法创建对象URL
3. this.cropper.replace(this.previewImage),第一次初始化完成后,如果预览图片发生了变化,裁切器默认不会更新,可以使用裁切器的replace方法,更新数据

<script>
import 'cropperjs/dist/cropper.css'
import Cropper from 'cropperjs'export default {name: 'settingIndex',props: {},components: {},data () {return {dialogVisible: false,previewImage: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg', // 上传图片cropper: null // 裁切器实例}},computed: {},watch: {},methods: {// 上传图片改变onFileChange () {// 在对话框中显示上传的图片const file = this.$refs.fileRef// objectURL=windows.URL.createObjectURL(blod);blod 参数是File对象或者是Blod对象,// file.files[0] 获得上传图片的file对象// 通过window.URL.createObjectURL()方法创建对象URLconst blobData = window.URL.createObjectURL(file.files[0])this.previewImage = blobData// 上传完头像,显示预览头像对话框this.dialogVisible = true// 解决选择相同文件不触发change事件问题file.value = ''},// 对话框打开动画结束的回调// 因为要在对话框中初始化剪切器,所以需要在对话框完全打开后再初始化剪切器onDialogOpend () {// 第一次初始化完成后,如果预览图片发生了变化,裁切器默认不会更新// 可以使用裁切器的replace方法,更新数据if (this.cropper) {this.cropper.replace(this.previewImage)return}// 初始化裁切器const image = this.$refs.previewImagethis.cropper = new Cropper(image, {aspectRatio: 1, // 初始化剪切选择框大小viewMode: 1 // 不能把剪切框移出图片本身})},// 点击对话框确定按钮,更新修改后的图片onUpdataPhoto () {this.cropper.getCroppedCanvas().toBlob((file) => {// 发送请求更新图片// const formData = new FormData()// formData.append('croppedImage', file)// 调用后端接口,发送请求,更改头像图片// updateUserPhoto(formData).then(res => {// console.log(res)})const imgURL = window.URL.createObjectURL(file)console.log(imgURL)this.previewImage = imgURL})this.dialogVisible = false}},created () { },mounted () { },beforeDestroy () { }
}
</script>

vue项目中使用cropperjs实现上传头像并裁切头像大小相关推荐

  1. vue项目中的h5图片上传(处理上传的时候图片被旋转的问题,并压缩图片大小)

    vue的图片上传 这个页面实现的主要是实现创建球队功能,里面包含队徽,球队类型,球队名称,所属地址 这里除了图片上传还有一个地址的三级联动功能,这里我把这个页面都贴上来了.这个项目中使用vux作为ui ...

  2. vue项目中阻止浏览器返回上一页

    vue项目中在某个页面阻止浏览器返回上一页,适用移动端.PC端. 使用场景例如: 首页 与 A页面     来回跳转,那样点击浏览器返回时也会来回跳转,本想当页面在首页的时候就不再返回了,所以这个时候 ...

  3. Java Web项目中遇到的文件上传与下载问题

    (转发自:https://www.cnblogs.com/xdp-gacl/p/4200090.html)   在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中 ...

  4. ssm框架的项目中用户图片的上传功能

    后台管理的web项目中,需要完成图片的上传功能 工具准备:一.图片上传的必要JS文件:二:当前页面中JS重写提交图片的方法:三.后台接收和处理图片的方法 整体思路:一.HTML中添加文件上传按钮: 二 ...

  5. 分享一些在 VUE 项目中你可能会用上的性能优化技巧

    提起性能优化 很多人眼前浮现的面试经验是不是历历在目呢?反正,性能优化在我看来他永远是前端领域的热度之王. 最近维护的项目恰巧在这个方向下了很大功夫,一些经验之谈奉上,希望对大家有些许帮助! 性能优化 ...

  6. vue项目路径修改及打包上传到服务器

    1.项目路径修改 默认项目路径是localhost:8080,如果要配置位相对路径,需要在config/index.js文件的 assetsPublicPath配置为 ./ 2.项目打包 用命令行工具 ...

  7. JAVA项目中如何实现图片上传?

    JAVA项目中实现图片上传 **前端div** <div class="layui-form-item"><label class="layui-for ...

  8. vue 项目 支持 ie9 实现文件上传

    最近在做的一个项目,需要兼容到ie9,其他功能都好实现,唯有文件上传这块,花费了挺长时间的,遇到了很多坑,现在整理一下 大家应该知道,element-ui和iview中的文件上传,是不支持ie9的 这 ...

  9. VUE项目 Iview UI 文件夹上传

    html <!-- 表格操作中的上传文件夹 --> <el-table-column label="操作" width="200">&l ...

最新文章

  1. Linux下设置mysql和tomcat开机启动
  2. php 经纬度 摩卡 转换,WGS84经纬度坐标与WEB摩卡托坐标转换
  3. Docker 下安装 Spark
  4. html左侧td字体居右,如何在td中控制字体右对齐 且加粗_html/css_WEB-ITnose
  5. css提取页面元素唯一性_下面这个函数,能够获取一个元素的任意 CSS 属性值。...
  6. 【python】Python的基本数据类型之数据转换
  7. php 如何将xml转为数组array
  8. 软件行业各职位英文缩写
  9. 计算机快捷方式app卸载,一打开电脑就自动出现的快捷方式软件删不掉怎么办
  10. QT中使用ActiveX
  11. 取消u盘写保护 u盘量产教程(无数尝试后的终极解决办法)
  12. ch3 电磁干扰的耦合和传播
  13. 微积分小糊涂源于微积分大糊涂
  14. Python求风向xy向量
  15. 微信小程序商城 (后台JAVA)
  16. mysql关系图查看
  17. Going to Redmond (keep moving)
  18. 微信朋友圈奢侈品代购背后:圈子营销光明正大卖“假货”
  19. wp/wordpress文章页面添加阅读量/点击量,后台并显示阅读量
  20. 无人机生态环境监测、图像处理与GIS数据分析综合应用

热门文章

  1. spring security2认证详解说明
  2. QQ换肤源码实战,一步一步教你操作
  3. cocos2dx中使用JPG图和只带Alpha的PNG图合成渲染
  4. 基尼系数和信息熵的概念和公式
  5. 力扣 #36.有效的数独 JAVA实现
  6. 强制性认证覆盖百余种工业产品
  7. Redhat linux9下安装DNS配置文档
  8. java websocket 关闭_Websocket关闭连接
  9. ldflags_使用ldflags设置Go应用程序的版本信息
  10. 加密与安全——Hmac算法