Vue image cropping component example code

Vue image cropping component example code

Example:

tip: This component is based on vue-cropper secondary packaging

Install the plugin

npm install vue-cropper

yarn add vue-cropper

Write packaged components

<!-- Simple image cropping component--- Secondary packaging-->
<!-- More APIs https://github.com/xyxiao001/vue-cropper -->
<!-- Usage: Pass in the image ratio to display or hide. Method: Listen for the bottom button click --- add more props query documents yourself -->

<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">Cancel</div>
      <img @click="clickRotate" src="../../assets/paradise/rotate.png" alt="" />
      <div @click="clickOk" class="okey">OK</div>
    </div>
  </div>
</template>

<script>
import { VueCropper } from 'vue-cropper';
export default {
  name: 'PictureCropping',
  components: { VueCropper },
  props: {
    value: {
      type: Boolean,
      default: false,
    },
    //Crop the image address img: {
      type: String,
      default: '',
    },
    //The aspect ratio of the screenshot frame fixedNumber: {
      type: Array,
      default: () => {
        return [1, 1];
      },
    },
  },
  data() {
    return {
      // Basic configuration option for the cropping component
      : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
  },
  computed: {},
  watch: {},
  //Life cycle - creation completed (access the current this instance)
  created() {},
  //Life cycle - Mounting completed (accessing DOM elements)
  mounted() {},
  methods: {
    clickCancelCut() {
      this.$emit('clickCancelCut', 'Click to cancel');
      this.$refs.cropper.stopCrop();
      this.$refs.cropper.clearCrop();
    },
    clickRotate() {
      this.$refs.cropper.rotateRight();
      this.$emit('clickRotate', 'Click to rotate');
    },
    clickOk() {
      //Output the trimmed 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(); Import css class*/
.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>

Summarize

This is the end of this article about the Vue image cropping component. For more relevant Vue image cropping component content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Vue project implements adding image cropping component
  • Detailed explanation of how to use vue-cropper, a Vue image cropping plugin
  • Vue realizes uploading after cropping pictures
  • Implementation of Vue image cropping and uploading component
  • Detailed explanation of implementing image cropping function in vue project
  • vue-image-crop is an example of a mobile image cropping component based on Vue
  • Vue-cropper The basic principles and ideas of picture cropping
  • Encapsulating Vue based on cropper.js to realize online image cropping component function
  • Cropper js implementation code of image cropping and uploading function based on Vue
  • Detailed explanation of the use of el-upload component and image cropping function component in ElementUI component of Vue project

<<:  Reasons and methods for Waiting for table metadata lock in MySQL

>>:  Example code and method of storing arrays in mysql

Recommend

Detailed explanation of MySQL master-slave database construction method

This article describes how to build a MySQL maste...

nginx solves the problem of slow image display and incomplete download

Written in front Recently, a reader told me that ...

TCP performance tuning implementation principle and process analysis

Three-way handshake phase Number of retries for c...

Docker learning: the specific use of Container containers

Container is another core concept of Docker. Simp...

Exploration of three underlying mechanisms of React global state management

Table of contents Preface props context state Sum...

Navicat Premium operates MySQL database (executes sql statements)

1. Introduction to Navicat 1. What is Navicat? Na...

How to effectively compress images using JS

Table of contents Preface Conversion relationship...

Practical tutorial on modifying MySQL character set

Preface: In MySQL, the system supports many chara...

How to build php7 with docker custom image

First, perform a simple Docker installation. To c...

Why the CSS attribute value clear:right does not work in detail

Using the clear property to clear floats is a comm...

Design a data collector with vue

Table of contents Scenario Core Issues Status mon...

Summary of some common techniques in front-end development

1. How to display the date on the right in the art...

Common array operations in JavaScript

Table of contents 1. concat() 2. join() 3. push()...

Example code of vue icon selector

Source: http://www.ruoyi.vip/ import Vue from ...