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 相关文章推荐
详解Vue中的自定义指令
Dec 07 Vue.js
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
Vue组件简易模拟实现购物车
Dec 21 Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
详解vue3中组件的非兼容变更
Mar 03 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
ant design vue的form表单取值方法
Jun 01 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
对javascript和select部件的结合运用
2006/10/09 PHP
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
2020/12/07 Vue.js
python 查找字符串是否存在实例详解
2017/01/20 Python
python实现神经网络感知器算法
2017/12/20 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
淘宝活动策划方案
2014/02/06 职场文书
中国世界遗产导游词
2015/02/13 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers