vue+element实现图片上传及裁剪功能


Posted in Javascript onJune 29, 2020

本文实例为大家分享了vue+element实现图片上传及裁剪的具体代码,供大家参考,具体内容如下

随便写的一个小demo 功能是没有任何问题 可能里面会有一些小细节没有优化 

1 、安装 vue-cropper

npm install vue-cropper

2、组件内使用

import { VueCropper } from 'vue-cropper' 
components: {
 VueCropper,
},

具体可见官网

demo

<template>
  <div>
    <h1>图片上传</h1>
    <div>
      <el-upload
        class="avatar-uploader"
        action="https://jsonplaceholder.typicode.com/posts/"
        :show-file-list="false"
        :on-success="handleAvatarSuccess"
        :before-upload="beforeAvatarUpload"
      >
      <img v-if="imageUrl" :src="imageUrl" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
      </el-upload>
    </div>
    <el-dialog title="图片剪裁" :visible.sync="dialogVisible" append-to-body>
      <div class="cropper-content">
        <div class="cropper" style="text-align:center">
          <vueCropper
            ref="cropper"
            :img="option.img"
            :outputSize="option.outputSize"
            :outputType="option.outputType"
            :info="option.info"
            :canScale="option.canScale"
            :autoCrop="option.autoCrop"
            :autoCropWidth="option.autoCropWidth"
            :autoCropHeight="option.autoCropHeight"
            :fixed="option.fixed"
            :fixedBox="option.fixedBox"
            :fixedNumber="option.fixedNumber"
          ></vueCropper>
        </div>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="finish" :loading="loading">确认</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import {VueCropper} from 'vue-cropper'
export default {
  components: {
    VueCropper
  },
  data(){
    return{
      imageUrl: '',
      dialogVisible: false,
      // 裁剪组件的基础配置option
      option: {
        img: '', // 裁剪图片的地址
        info: true, // 裁剪框的大小信息
        outputSize: 0.8, // 裁剪生成图片的质量
        outputType: 'jpeg', // 裁剪生成图片的格式
        canScale: false, // 图片是否允许滚轮缩放
        autoCrop: true, // 是否默认生成截图框
        autoCropWidth: 100, // 默认生成截图框宽度
        autoCropHeight: 100, // 默认生成截图框高度
        fixedBox: true, // 固定截图框大小 不允许改变
        fixed: true, // 是否开启截图框宽高固定比例
        fixedNumber: [1, 1], // 截图框的宽高比例
        full: true, // 是否输出原图比例的截图
        canMoveBox: false, // 截图框能否拖动
        original: false, // 上传图片按照原始比例渲染
        centerBox: false, // 截图框是否被限制在图片里面
        infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
        canMove:true,
      },
      picsList: [], //页面显示的数组
      // 防止重复提交
      loading: false,
      fileinfo:{}
    }
  },
  methods: {
   handleAvatarSuccess(res, file,fileList) {
    //上传成功后将图片地址赋值给裁剪框显示图片
    this.$nextTick(() => {
      this.option.img = URL.createObjectURL(file.raw);
      this.fileinfo = res
      this.dialogVisible = true
    })
   },
   beforeAvatarUpload(file) {
    const isJPG = file.type === 'image/jpeg'||file.type==='image/png';
    const isLt2M = file.size / 1024 / 1024 < 2;
 
    if (!isJPG) {
     this.$message.error('上传头像图片只能是 JPG 格式!');
    }
    if (!isLt2M) {
     this.$message.error('上传头像图片大小不能超过 2MB!');
    }
    return isJPG && isLt2M;
   },
    finish() {
      this.$refs.cropper.getCropBlob((data) => {
        var fileName = 'goods' + this.fileinfo.uid
        this.loading = true
        //上传阿里云服务器
        //请求
      })
    }
  }
}
</script>
<style scoped>
  .avatar-uploader{
    background:red!important;
    width:150px;height:150px;
    text-align: center;
    line-height: 150px;
  }
  .el-icon-plus{
    width:150px;height:150px;font-size:30px;
  }
  .cropper-content{
    width:500px;height:500px;background: pink;
  }
  .cropper{
    width:500px;
    height:500px;
    background: yellow;
  }
</style>

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

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

Javascript 相关文章推荐
IE8下关于querySelectorAll()的问题
May 13 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
jquery悬浮提示框完整实例
Jan 13 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
javascript self对象使用详解
Oct 18 Javascript
React创建组件的三种方式及其区别
Jan 12 Javascript
单击按钮发送验证码,出现倒计时的简单实例
Mar 17 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
Vue 列表上下过渡效果的实例代码
Jun 25 Javascript
JS实现鼠标移动拖尾
Dec 27 Javascript
vue实现匀速轮播效果
Jun 29 #Javascript
vant实现购物车功能
Jun 29 #Javascript
js实现随机点名器精简版
Jun 29 #Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 #Javascript
在Vue中使用antv的示例代码
Jun 29 #Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
Jun 29 #Javascript
纯JS开发baguetteBox.js响应式画廊插件
Jun 28 #Javascript
You might like
PHP生成树的方法
2015/07/28 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
$()JS小技巧
2007/07/21 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
javascript每日必学之多态
2016/02/23 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
python实现简单登陆系统
2018/10/18 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python的scipy实现插值的示例代码
2019/11/12 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
python判断元素是否存在的实例方法
2020/09/24 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
喝酒检查书范文
2014/02/23 职场文书
医院院务公开实施方案
2014/05/03 职场文书
大学生年度个人总结
2015/02/15 职场文书
结婚司仪主持词
2015/06/29 职场文书