Vue图片裁剪组件实例代码


Posted in Vue.js onJuly 02, 2021

示例:

Vue图片裁剪组件实例代码

tip: 该组件基于vue-cropper二次封装

安装插件

npm install vue-cropper

yarn add vue-cropper

写入封装的组件

<!-- 简易图片裁剪组件 --- 二次封装 -->
<!-- 更多api https://github.com/xyxiao001/vue-cropper -->
<!-- 使用:传入图片 比例 显示隐藏。方法:监听底部按钮点击即可  ---更多props查询文档自行添加 -->

<template>
  <div v-if="value" :value="value" @input="val => $emit('input', val)" class="conbox">
    <div class="info">
      <vueCropper
        ref="cropper"
        :img="img"
        :outputSize="outputSize"
        :outputType="outputType"
        :info="info"
        :canScale="canScale"
        :autoCrop="autoCrop"
        :fixed="fixed"
        :fixedNumber="fixedNumber"
        :full="full"
        :fixedBox="fixedBox"
        :canMove="canMove"
        :canMoveBox="canMoveBox"
        :original="original"
        :centerBox="centerBox"
        :infoTrue="infoTrue"
        :mode="mode"
      ></vueCropper>
    </div>
    <div class="btns">
      <div @click="clickCancelCut" class="cancel">取消</div>
      <img @click="clickRotate" src="../../assets/paradise/rotate.png" alt="" />
      <div @click="clickOk" class="okey">确定</div>
    </div>
  </div>
</template>

<script>
import { VueCropper } from 'vue-cropper';
export default {
  name: 'PictureCropping',
  components: { VueCropper },
  props: {
    value: {
      type: Boolean,
      default: false,
    },
    //裁剪图片的地址
    img: {
      type: String,
      default: '',
    },
    //截图框的宽高比例
    fixedNumber: {
      type: Array,
      default: () => {
        return [1, 1];
      },
    },
  },
  data() {
    return {
      // 裁剪组件的基础配置option
      //   img: this.img, // 裁剪图片的地址
      outputSize: 1, // 裁剪生成图片的质量
      outputType: 'jpeg', // 裁剪生成图片的格式
      info: true, // 裁剪框的大小信息
      canScale: true, // 图片是否允许滚轮缩放
      autoCrop: true, // 是否默认生成截图框
      // autoCropWidth: 300, // 默认生成截图框宽度
      // autoCropHeight: 200, // 默认生成截图框高度
      fixed: true, // 是否开启截图框宽高固定比例
      //   fixedNumber: this.fixedNumber, // 截图框的宽高比例
      full: true, // 是否输出原图比例的截图
      fixedBox: true, // 固定截图框大小 不允许改变
      canMove: true, //上传图片是否可以移动
      canMoveBox: true, // 截图框能否拖动
      original: false, // 上传图片按照原始比例渲染
      centerBox: true, // 截图框是否被限制在图片里面
      // high:true,// 是否按照设备的dpr 输出等比例图片
      infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
      // maxImgSize: 2000, //限制图片最大宽度和高度
      // enlarge: 1, //图片根据截图框输出比例倍数
      mode: 'contain', //图片默认渲染方式
    };
  },
  computed: {},
  watch: {},
  //生命周期 - 创建完成(访问当前this实例)
  created() {},
  //生命周期 - 挂载完成(访问DOM元素)
  mounted() {},
  methods: {
    clickCancelCut() {
      this.$emit('clickCancelCut', '点击取消');
      this.$refs.cropper.stopCrop();
      this.$refs.cropper.clearCrop();
    },
    clickRotate() {
      this.$refs.cropper.rotateRight();
      this.$emit('clickRotate', '点击旋转');
    },
    clickOk() {
      //输出裁剪的base64
      this.$refs.cropper.getCropData(data => {
        this.$emit('clickOk', data);
        this.$refs.cropper.stopCrop();
        this.$refs.cropper.clearCrop();
      });
    },
  },
};
</script>
<style lang='less' scoped>
/* @import url(); 引入css类 */
.conbox {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  box-sizing: border-box;
  height: 100vh;
  width: 100%;
  background-color: #000;
  display: flex;
  flex-direction: column;
  justify-content: center;
  .info {
    width: auto;
    height: 800px;
    .vue-cropper {
      background-image: none;
      background-color: #000;
    }
  }
  .btns {
    padding: 0 20px;

    color: #fff;
    text-align: center;
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: absolute;
    left: 0;
    right: 0;
    bottom: 15px;
    img {
      width: 85px;
      height: 85px;
    }
    .cancel {
      background-color: #606465;
      padding: 15px 20px;
      width: 100px;
      border-radius: 10px;
    }
    .okey {
      background-color: #df6457;
      padding: 15px 20px;
      width: 100px;
      border-radius: 10px;
    }
  }
}
</style>

总结

到此这篇关于Vue图片裁剪组件的文章就介绍到这了,更多相关Vue图片裁剪组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
springboot+vue实现文件上传下载
Nov 17 Vue.js
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
vue+element实现动态加载表单
Dec 13 Vue.js
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
关于vue-router-link选择样式设置
Apr 30 Vue.js
vue postcss-px2rem 自适应布局
May 15 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
vue3中provide && inject的使用
Jul 01 #Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 #Vue.js
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
Vue实现tab导航栏并支持左右滑动功能
Vue3.0写自定义指令的简单步骤记录
vue.js Router中嵌套路由的实用示例
Jun 27 #Vue.js
You might like
介绍一些PHP判断变量的函数
2012/04/24 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
js常见遍历操作小结
2019/06/06 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
Python 命令行非阻塞输入的小例子
2013/09/27 Python
利用Python爬取可用的代理IP
2016/08/18 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
大学毕业生工作的自我评价
2013/10/01 职场文书
升职自荐信范文
2013/10/05 职场文书
物流专业大学应届生求职信
2013/11/03 职场文书
初一英语教学反思
2014/01/11 职场文书
班委竞选演讲稿
2014/04/28 职场文书
医学生求职自荐书
2014/06/12 职场文书
体育教师教学随笔
2015/08/15 职场文书
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫