Home Web Front-end JS Tutorial Detailed explanation of the use of vue crop preview component

Detailed explanation of the use of vue crop preview component

May 14, 2018 am 10:48 AM
use components Detailed explanation

This time I will bring you a detailed explanation of the use of the vue cropping preview component. What are the precautions for the vue cropping preview component? The following is a practical case, let's take a look.

Vue version cropping tool, including preview function

Final effect: qiuyaofan.github.io/vue-crop-de…

Source code address: github.com/qiuyaofan /v…

The first step: first use vue-cli to install the scaffolding (see the vue-cli official website if you don’t know how to install it)

// 初始化vue-cli
vue init webpack my-plugin
Copy after login

The second step: create the file

Create new src/views/validSlideDemo.vue,

Create new VueCrop/index.js, VueCrop.vue in src/components,

configure access routes in routes/index.js (see github source code for details )

The final generated file structure is as follows:

Step 3: Register components

1. Reference all plug-ins: src/ components/index.js

// 导入插件入口文件
import VueCrop from './VueCrop/index.js'
const install = function (Vue, opts = {}) {
 /* 如果已安装就跳过 */
 if (install.installed) return
 // 注册插件
 Vue.component(VueCrop.name, VueCrop)
}
// 全局情况下注册插件
if (typeof window !== 'undefined' && window.Vue) {
 install(window.Vue)
}
export {
 install,
 // 此处是为了兼容在vue内单独引入这个插件,如果是main.js全局引入就可以去掉
 VueCrop
}
Copy after login

2. Globally call the plug-in: src/main.js (vue plugins official documentation explains install)

import Vue from 'vue'
import App from './App'
import router from './router'
// 新加的:导入入口文件
import { install } from 'src/components/index.js'
// 全局调用,相当于调用 `MyPlugin.install(Vue)`
Vue.use(install)
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 components: { App },
 template: '<App/>'
})
Copy after login

3. The VueCrop entry file calls VueCrop.vue: src/ components/VueCrop/index.js

// 导入vue
import VueCrop from './VueCrop.vue'
// Vue.js 的插件应当有一个公开方法 install 。这个方法的第一个参数是 Vue 构造器
VueCrop.install = function (Vue) {
 // 注册组件
 Vue.component(VueCrop.name, VueCrop)
}
export default VueCrop
Copy after login

Summary: I always had a misunderstanding at the beginning, thinking that myPlugin.install is a method of vue. In fact, it is not. It is just a public method for us to construct plugin ID, which is understandable. The method of constructor in native js:

function MyPlugin(){
 console.info('构造函数')
}
MyPlugin.prototype.install=function(vue,options){
 console.info('构造器vue:'+vue);
}
Copy after login

and the actual registered component is: Vue.component()

So, vue The plug-in registration process is:

1. Call main.js:

import { install } from 'src/components/index.js'
vue.use(install)
Copy after login

2. Add the install method to index.js and call Vue.component to register the component

3. The index.js in the component is the same as the index.js of all components

Step 4: Design and develop your own components and build the component structure

Before this, you can first understand the naming of the components Specifications, etc., please refer to the article Nuggets: Vue front-endDevelopment specifications, of which point 2 is explained in detail

First, determine your own calling method and the parameters that need to be exposed

<vue-crop
:crop-url="cropUrl1"
:ratio="ratio"
:height="460"
:width="460"
:previewJson="previewJson1"
class="c-crop--preview_right"
@afterCrop="afterCrop"
>
>
Copy after login

Among them, @afterCrop="afterCrop" is the callback function after cropping is completed , and the others are attribute configurations

in the component

src/components/VueCrop/VueCrop.vue, you can use this.$emit('afterCrop') to trigger the afterCrop event in the demo

In terms of component structure, it is mainly divided into: cutting the main part, and the marquee component (VueCropTool .vue), calculation of crop box width, position coordinates, etc. (VueCropMove.js), drag event registration public js (components/utils/draggable.js)

draggable.js refers to the one in element, modify it Part of it, the source code is as follows

export default function (element, options) {
 const moveFn = function (event) {
  if (options.drag) {
   options.drag(event)
  }
 }
 // mousedown fn
 const downFn = function (event) {
  if (options.start) {
   // 调用参数中start函数
   options.start(event)
  }
 }
 // mouseup fn
 const upFn = function (event) {
  document.removeEventListener('mousemove', moveFn)
  document.removeEventListener('mouseup', upFn)
  document.onselectstart = null
  document.ondragstart = null
  if (options.end) {
   // 调用参数中end函数
   options.end(event)
  }
 }
 // 绑定事件
 element.addEventListener('mousedown', event => {
  if (options.stop && options.stop(event, element) === false) {
   return false
  }
  document.onselectstart = function () {
   return false
  }
  document.ondragstart = function () {
   return false
  }
  document.addEventListener('mousedown', downFn)
  document.addEventListener('mousemove', moveFn)
  document.addEventListener('mouseup', upFn)
 })
}
Copy after login
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the PHP Chinese website!

Recommended reading:

Vue modifier trigger event

Detailed explanation of the steps for using the vue region selection component

Detailed explanation of JS Baidu search box effect function implementation case

The above is the detailed content of Detailed explanation of the use of vue crop preview component. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What software is crystaldiskmark? -How to use crystaldiskmark? What software is crystaldiskmark? -How to use crystaldiskmark? Mar 18, 2024 pm 02:58 PM

What software is crystaldiskmark? -How to use crystaldiskmark?

Detailed explanation of obtaining administrator rights in Win11 Detailed explanation of obtaining administrator rights in Win11 Mar 08, 2024 pm 03:06 PM

Detailed explanation of obtaining administrator rights in Win11

How to download foobar2000? -How to use foobar2000 How to download foobar2000? -How to use foobar2000 Mar 18, 2024 am 10:58 AM

How to download foobar2000? -How to use foobar2000

How to use Baidu Netdisk app How to use Baidu Netdisk app Mar 27, 2024 pm 06:46 PM

How to use Baidu Netdisk app

How to use NetEase Mailbox Master How to use NetEase Mailbox Master Mar 27, 2024 pm 05:32 PM

How to use NetEase Mailbox Master

Detailed explanation of division operation in Oracle SQL Detailed explanation of division operation in Oracle SQL Mar 10, 2024 am 09:51 AM

Detailed explanation of division operation in Oracle SQL

Teach you how to use the new advanced features of iOS 17.4 'Stolen Device Protection' Teach you how to use the new advanced features of iOS 17.4 'Stolen Device Protection' Mar 10, 2024 pm 04:34 PM

Teach you how to use the new advanced features of iOS 17.4 'Stolen Device Protection'

BTCC tutorial: How to bind and use MetaMask wallet on BTCC exchange? BTCC tutorial: How to bind and use MetaMask wallet on BTCC exchange? Apr 26, 2024 am 09:40 AM

BTCC tutorial: How to bind and use MetaMask wallet on BTCC exchange?

See all articles