Skip to content

Commit b6aa068

Browse files
committed
feat(draggable plugin): add event after-move
1 parent 4eb9aff commit b6aa068

File tree

5 files changed

+45
-7
lines changed

5 files changed

+45
-7
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
},
3030
"dependencies": {
3131
"@babel/runtime": "^7.7.7",
32-
"draggable-helper": "^5.0.3",
32+
"draggable-helper": "^5.0.4",
3333
"helper-js": "^2.0.1",
3434
"vue-functions": "^2.0.6",
3535
"vue-runtime-helpers": "^1.1.2"

src/examples/InScrollBox.vue

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
<template lang="pug">
33
.InScrollBox
44
h2 In scroll box
5-
.scrollbox()
6-
Tree(:value="treeData" ref="tree" edgeScroll)
5+
.scrollbox(ref="scrollbox")
6+
Tree(:value="treeData" ref="tree" edgeScroll @after-move="afterMove")
77
div(slot-scope="{node, index, path, tree}")
88
b(v-if="node.children && node.children.length > 0" @click="tree.toggleFold(node, path)") {{node.$folded ? '+' : '-'}}&nbsp;
99
input(type="checkbox" :checked="node.$checked" @change="tree.toggleCheck(node, path)")
@@ -47,7 +47,24 @@ export default {
4747
},
4848
// computed: {},
4949
// watch: {},
50-
methods: {},
50+
methods: {
51+
afterMove(store) {
52+
const closestBranch = store.oneMoveStore?.info?.closestBranch
53+
const {placeholder} = store
54+
if (closestBranch && placeholder) {
55+
if (placeholder.parentElement.parentElement === closestBranch) {
56+
// is child
57+
console.log('child');
58+
} else if (placeholder.nextSibling === closestBranch) {
59+
// is previous sibling
60+
console.log('previous');
61+
} else if (placeholder.previousSibling === closestBranch) {
62+
// is next sibling
63+
console.log('next');
64+
}
65+
}
66+
},
67+
},
5168
// created() {},
5269
mounted() {
5370
},

src/plugins/draggable/Draggable.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export default {
2222
edgeScrollTriggerMargin: {type: Number, default: 50},
2323
edgeScrollSpeed: {type: Number, default: 0.35},
2424
edgeScrollTriggerMode: {type: String, default: 'top_left_corner'},
25+
edgeScrollSpecifiedContainerX: {}, // HTMLElement || ((store) => HTMLElement)
26+
edgeScrollSpecifiedContainerY: {}, // HTMLElement || ((store) => HTMLElement)
2527
preventTextSelection: {type: Boolean, default: true},
2628
},
2729
// components: {},
@@ -135,6 +137,8 @@ export default {
135137
edgeScrollTriggerMargin: this.edgeScrollTriggerMargin,
136138
edgeScrollSpeed: this.edgeScrollSpeed,
137139
edgeScrollTriggerMode: this.edgeScrollTriggerMode,
140+
edgeScrollSpecifiedContainerX: this.edgeScrollSpecifiedContainerX,
141+
edgeScrollSpecifiedContainerY: this.edgeScrollSpecifiedContainerY,
138142
rtl: this.rtl,
139143
preventTextSelection: this.preventTextSelection,
140144
treeClass: 'he-tree',
@@ -212,6 +216,7 @@ export default {
212216
if (startTree.hasHook('ondragstart') && startTree.executeHook('ondragstart', [startTree, store]) === false) {
213217
return false
214218
}
219+
store.startTree.$emit('before-first-move', store)
215220
store.startTree.$emit('drag', store)
216221
this.$root.$emit('he-tree-drag', store)
217222
},
@@ -236,12 +241,14 @@ export default {
236241
return false
237242
}
238243
},
244+
afterMove: (store) => {
245+
store.startTree.$emit('after-move', store)
246+
},
239247
beforeDrop: (pathChanged, store) => {
240248
const {targetTree} = store
241249
if (targetTree.hasHook('ondragend') && targetTree.executeHook('ondragend', [targetTree, store]) === false) {
242250
return false
243251
}
244-
targetTree.$emit('before-drop', store)
245252
this.$root.$emit('he-tree-before-drop', store)
246253
},
247254
afterDrop: (store, t) => {
@@ -316,7 +323,7 @@ export default {
316323
'unfoldWhenDragoverDelay',
317324
'draggingNodePositionMode',
318325
'cloneWhenDrag',
319-
'edgeScroll', 'edgeScrollTriggerMargin', 'edgeScrollSpeed', 'edgeScrollTriggerMode',
326+
'edgeScroll', 'edgeScrollTriggerMargin', 'edgeScrollSpeed', 'edgeScrollTriggerMode', 'edgeScrollSpecifiedContainerY', 'edgeScrollSpecifiedContainerY',
320327
'rtl',
321328
'preventTextSelection',
322329
].forEach(name => {

src/plugins/draggable/draggable.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ export default function makeTreeDraggable(treeEl, options = {}) {
2828
// edgeScrollTriggerMargin: 50,
2929
// edgeScrollSpeed: 0.35,
3030
// edgeScrollTriggerMode: 'top_left_corner',
31+
// edgeScrol: 'top_left_corner',
32+
// edgeScrollSpecifiedContainerX?: HTMLElement,
33+
// edgeScrollSpecifiedContainerY?: HTMLElement,
3134
// rtl: false
3235
// preventTextSelection: boolean
3336
...options,
@@ -42,6 +45,8 @@ export default function makeTreeDraggable(treeEl, options = {}) {
4245
edgeScrollTriggerMargin: options.edgeScrollTriggerMargin,
4346
edgeScrollSpeed: options.edgeScrollSpeed,
4447
edgeScrollTriggerMode: options.edgeScrollTriggerMode,
48+
edgeScrollSpecifiedContainerX: options.edgeScrollSpecifiedContainerX,
49+
edgeScrollSpecifiedContainerY: options.edgeScrollSpecifiedContainerY,
4550
rtl: options.rtl,
4651
preventTextSelection: options.preventTextSelection,
4752
updateMovedElementStyleManually: true,
@@ -302,6 +307,8 @@ export default function makeTreeDraggable(treeEl, options = {}) {
302307
//
303308
hp.attachCache(info, info)
304309
hp.attachCache(conditions, conditions)
310+
store.oneMoveStore.info = info
311+
store.oneMoveStore.conditions = conditions
305312
// actions start ========================================
306313
const doAction = (name, ...args) => {
307314
if (!store._doActionQueue) {
@@ -434,6 +441,9 @@ export default function makeTreeDraggable(treeEl, options = {}) {
434441
// actions end ========================================
435442
doDraggableDecision({options, event: store.moveEvent, store, opt: dhOptions, info, conditions, actions, doAction})
436443
},
444+
afterMove: (store, dhOptions) => {
445+
options.afterMove && options.afterMove(store, dhOptions)
446+
},
437447
beforeDrop: async (store, dhOptions) => {
438448
const {endEvent} = store
439449
const movingEl = store.movedElement // branch

types/index.d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,11 @@ export class Draggable extends Vue{
162162
@Prop({default: 0.35})
163163
edgeScrollSpeed: number
164164
@Prop({default: 'top_left_corner'})
165-
edgeScrollTriggerMode: 'top_left_corner'|'mouse'
165+
edgeScrollTriggerMode: dh.Options['edgeScrollTriggerMode']
166+
@Prop()
167+
edgeScrollSpecifiedContainerX: dh.Options['edgeScrollSpecifiedContainerX']
168+
@Prop()
169+
edgeScrollSpecifiedContainerY: dh.Options['edgeScrollSpecifiedContainerY']
166170
// data
167171
treesStore: {store: Store} // just for get the darg info store
168172
// methods

0 commit comments

Comments
 (0)