特征
- 沒有依賴
- 使用可拖動,可調整大小或兩者兼備
- 定義用於調整大小的句柄
- 限制大小和移動到父元素或自定義選擇器
- 將元素捕捉到自定義網格
- 將拖動限制為垂直或水平軸
- 保持縱橫比
- 啟用觸控功能
- 使用自己的樣式
- 為句柄提供自己的樣式
安裝和基本用法
npm install --save vue-draggable-resizable
全局注冊組件main.js中寫入:
import Vue from 'vue'
import VueDraggableResizable from 'vue-draggable-resizable'
// 可選擇導入默認樣式
import 'vue-draggable-resizable/dist/VueDraggableResizable.css'
Vue.component('vue-draggable-resizable', VueDraggableResizable)
局部注冊:在使用的組件里引用
import VueDraggableResizable from 'vue-draggable-resizable' import 'vue-draggable-resizable/dist/VueDraggableResizable.css'
常用屬性總結
:w 默認寬度 :h 默認高度 :x="50" 默認水平坐標 注意相對元素是誰 :y="50" 默認垂直最表 注意相對元素是誰 :min-width="50" 最小寬度 :min-height="50" 最小高度 :parent="true" 限制不能拖出父元素 parent=".p-event" 限制不能拖出class為p-event的元素 :grid 水平和垂直移動 每次分別能夠走多少像素 class-name 自定義組件class 下面定義一個dragging1
常用事件總結
事件簡述 文檔(可點擊直接進入)中ctrl+f 搜索 “事件” 查看詳細事件參數 本demo舉例的不一一闡述 @dragging="onDrag" 每當拖動組件時調用。 @resizing="onResize" 每當組件調整大小時調用。 本demo沒用到的 可能會用到的 @dragstop="onDragstop" 每當組件停止拖動時調用。 @resizestop="onResizstop" 每當組件停止調整大小時調用 @deactivated="onDeactivated" 每當用戶單擊組件外的任何位置時調用 @activated="onActivated" 單擊組件時調用,以顯示句柄。備注:句柄就是點擊組件后上下左右的可以拉伸的方塊點
舉例
vue模板代碼
<div class="helloword">
<div class="text-event">
<vue-draggable-resizable
:w="150"
:h="150"
:x="50"
:y="50"
:min-width="50"
:min-height="50"
:parent="true"
:grid="[10,10]"
class-name="dragging1"
@dragging="onDrag"
@resizing="onResize"
>
<p>
你好! 我是一個靈活的組件。 你可以拖我四處,你可以調整我的大小。
<br />
X: {{ x }} / Y: {{ y }} - Width: {{ width }} / Height: {{ height }}
</p>
</vue-draggable-resizable>
</div>
<!-- 相對於class等於什么的標記拖拽 注意指定 parent -->
<div class="p-event">
<vue-draggable-resizable
parent=".p-event"
>
<p>You can drag me around and resize me as you wish.</p>
</vue-draggable-resizable>
</div>
</div>
vue script代碼
export default {
name: "HelloWorld",
data: function() {
return {
width: 0,
height: 0,
x: 0,
y: 0
};
},
methods: {
onResize: function(x, y, width, height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
},
onDrag: function(x, y) {
this.x = x;
this.y = y;
}
}
};
vue 層疊樣式代碼
.helloword {
overflow: hidden;
}
.text-event {
float: left;
height: 500px;
width: 500px;
border: 1px solid red;
position: relative;
/* 網格設置 */
background: linear-gradient(-90deg, rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 10px 10px, linear-gradient(rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 10px 10px;
}
.p-event {
float: left;
height: 300px;
width: 300px;
border: 1px solid blue;
position: relative;
margin-left: 20px;
}
.dragging1 {
border: 1px solid #000;
color: #000;
}
運行效果:都限制在自己設置的元素中不得超出
- 網格設置 網格寬高為10像素,通過: :grid屬性控制每次拖拽移動多少像素 :grid:[10, 10]
- 單擊組件可顯示 句柄 用來調整寬度高度
- 拖拽移動組件可實時保存 水平 垂直 寬度 高度 的數據
注意:拖拽后背景變顏色是因為gif錄制的原因


