vue-drag-resize是一個支持拖拽與縮放的vue插件,支持vue 1.x與2.x,使用方便,上手便利,具備如下的幾個特徵:vue
gitHib地址: github.com/kirillmuras…git
$ npm i -s vue-drag-resizegithub
註冊爲全局組件,在vue項目中註冊:vuex
import Vue from 'vue' import VueDragResize from 'vue-drag-resize' Vue.component('vue-drag-resize', VueDragResize) 在任何組件中使用的時候,不用引入直接;npm
<vue-drag-resize:isActive = 'true'>app
在須要的組件中引入:編輯器
<template>
<div id="app">
<vue-drag-resize></vue-drag-resize>
</template>
import VueDragResize from 'vue-drag-resize';
export default {
name: 'app',
components: {
VueDragResize
},
}
複製代碼
Type: Boolean || Required: false || Default: falseui
處於激活狀態的組件才能進行拖拽與縮放等操做,狀態呈現激活狀態this
Type: Boolean || Required: false || Default: truespa
Type: Boolean || Required: false || Default: true
Type: Boolean || Required: false || Default: false
設置爲true,則會按照元素的元比例縮放。坑:定義了這個屬性,發現從新設置寬高的時候出現了異常(新值比例不一樣於舊值),須要在重設寬高的時候把aspectRatio設置爲false,再將其設置回去,才能保證新值的等比例
Type: Number || Required: false || Default: 200
Type: Number || Required: false || Default: 200
Type: Number || Required: false || Default: 50
注意,不能設置爲0,由於這個組件裏面屬性要求大於0
Type: Number || Required: false || Default: 50
注意,不能設置爲0,由於這個組件裏面屬性要求大於0
Type: Number || Required: false || Default: 0
Type: Number || Required: false || Default: 0
Type: Number || Required: false || Default: auto
注意在元素激活的時候,z會被設置爲最高的,因此在管理z的時候要注意
Type: Array || Required: false || Default: ['tl', 'tm', 'tr', 'mr', 'br', 'bm', 'bl', 'ml']
tl - Top left
tm - Top middle
tr - Top right
mr - Middle right
br - Bottom right
bm - Bottom middle
bl - Bottom left
ml - Middle left
複製代碼
Type: Boolean || Required: false || Default: false
設置這個屬性true,就能夠解決在其餘區域操做返回到組件區域的時候,不須要再次點擊就激活組件
Type: Boolean || Required: false || Default: false
設置爲true,則限制操做組件不能超出父級元素
Type: Number || Required: false || Default: 0
該值限制了元素能夠拖動的水平最大寬度,前提是parentLimitation=true
Type: Number || Required: false || Default: 0
該值限制了元素能夠拖動的水平最大高度,前提是parentLimitation=true
Type: Number || Required: false || Default: 1
Type: Number || Required: false || Default: 1
Type: String || Required: false || Default: both
取值能夠爲x、 y、 both、none
Type: String || Required: false
Type: String || Required: false
Required: false || Parameters: 組件實例
Required: false || Parameters: 無
Required: false || Parameters: object
{
left: Number, //the X position of the component
top: Number, //the Y position of the component
width: Number, //the width of the component
height: Number //the height of the component
}
複製代碼
Required: false || Parameters: object
object 同resizing的object
Required: false || Parameters: object
object 同resizing的object
Required: false || Parameters: object
object 同resizing的object
vue-drag-resize 的設計問題,在元素內部只能觸發本元素,若是是有表單元素,只能被動的觸發;解決:
<vue-drag-resize @activated="activateEv(index)" />
activateEv(index) {
console.log('activateEv' + index);
this.$refs['drag-input'].focus();
}
複製代碼
:preventActiveBehavior="true" 設置這個屬性,禁用點擊組件外事件
minh跟minw注意臨界值。默認是50,查看源碼發現必需要大於0 ,不能爲0,這就是大部分開發人員後臺報警告的緣由。固然,若是想要設置爲0,能夠從新定義屬性校驗規則
最佳的解決方案是使用數據去管理這些互斥的元素,能夠在父級設置數據管理,或者引入vuex進行數據管理。關鍵點在點擊,拖拽,失焦的時候,作到對數據的精確管理
這是一定會遇到而且沒法逃避的一個問題,操做上須要保持當前激活的組件是最上層,可是在整體上,又要確保其圖層管理的初始。維護zIndex,而且注意在刪除與置換層級的時候對應的數據修改。若是被激活,就設定爲一個最大的值,失去激活狀態,要恢復到初始值。
這個組件使用簡單,清楚明瞭,我本身在用的時候,就是上手很快,可是要如何良好的應用它,以及處理一些異常的狀況下,仍是有不少的坑。基於這個組件,我實現了一個編輯器的平臺,後續會更新這個組件更實用的一些應用實例,以及如何與vuex結合,實現一個基礎的h5編輯器平臺。再結合一些設置與多媒體的處理,便可以實現諸如易企秀、Maka等這種h5定製化平臺。一步一步總能夠實現的,加油鴨🦆