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 相关文章推荐
[JS]点出统计器
Oct 11 Javascript
ext 代码生成器
Aug 07 Javascript
在js中单选框和复选框获取值的方式
Nov 06 Javascript
jQuery each()小议
Mar 18 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
Jun 08 Javascript
DIV外区域Click后关闭DIV的实现代码
Dec 21 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 Javascript
js中对函数设置默认参数值的3种方法
Oct 23 Javascript
jQuery使用经验小技巧(推荐)
May 31 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
Sep 07 Javascript
基于JavaScript实现省市联动效果
Jun 22 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
初识php MVC
2014/09/10 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
ES6中的数组扩展方法
2016/08/26 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
python实现剪切功能
2019/01/23 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
python for循环remove同一个list过程解析
2019/08/14 Python
python @classmethod 的使用场合详解
2019/08/23 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
经典而简洁的婚礼主持词
2014/03/13 职场文书
导游个人求职信
2014/04/25 职场文书
小学课改工作总结
2015/08/13 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript