Skip to content

Commit 12a7cec

Browse files
committed
refactor: improve dnd experience
1 parent 0beca36 commit 12a7cec

File tree

1 file changed

+28
-29
lines changed

1 file changed

+28
-29
lines changed

src/plugin/nodeDraggable.ts

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,16 @@ export default function (mind: MindElixirInstance) {
6464
}
6565
if (mind.currentNodes) {
6666
dragged = mind.currentNodes
67-
ghost.innerHTML = mind.currentNodes.length + ' nodes'
67+
ghost.innerHTML = mind.currentNodes.length + ''
6868
} else {
6969
dragged = [target]
7070
ghost.innerHTML = target.innerHTML
7171
}
7272
for (const node of dragged) {
7373
node.parentElement.parentElement.style.opacity = '0.5'
7474
}
75-
e.dataTransfer?.setDragImage(ghost, 0, 0)
75+
e.dataTransfer!.setDragImage(ghost, 0, 0)
76+
e.dataTransfer!.dropEffect = 'move'
7677
dragMoveHelper.clear()
7778
})
7879

@@ -95,36 +96,34 @@ export default function (mind: MindElixirInstance) {
9596
dragged = null
9697
})
9798

98-
mind.map.addEventListener(
99-
'dragover',
100-
throttle(function (e: DragEvent) {
101-
if (!dragged) return
102-
clearPreview(meet)
103-
// minus threshold infer that postion of the cursor is above topic
104-
const topMeet = $d.elementFromPoint(e.clientX, e.clientY - threshold) as Topic
105-
if (canMove(topMeet, dragged)) {
106-
meet = topMeet
107-
const y = topMeet.getBoundingClientRect().y
108-
if (e.clientY > y + topMeet.clientHeight) {
109-
insertTpye = 'after'
99+
mind.map.addEventListener('dragover', function (e: DragEvent) {
100+
e.preventDefault()
101+
if (!dragged) return
102+
clearPreview(meet)
103+
// minus threshold infer that postion of the cursor is above topic
104+
const topMeet = $d.elementFromPoint(e.clientX, e.clientY - threshold) as Topic
105+
if (canMove(topMeet, dragged)) {
106+
meet = topMeet
107+
const y = topMeet.getBoundingClientRect().y
108+
if (e.clientY > y + topMeet.clientHeight) {
109+
insertTpye = 'after'
110+
} else {
111+
insertTpye = 'in'
112+
}
113+
} else {
114+
const bottomMeet = $d.elementFromPoint(e.clientX, e.clientY + threshold) as Topic
115+
if (canMove(bottomMeet, dragged)) {
116+
meet = bottomMeet
117+
const y = bottomMeet.getBoundingClientRect().y
118+
if (e.clientY < y) {
119+
insertTpye = 'before'
110120
} else {
111121
insertTpye = 'in'
112122
}
113123
} else {
114-
const bottomMeet = $d.elementFromPoint(e.clientX, e.clientY + threshold) as Topic
115-
if (canMove(bottomMeet, dragged)) {
116-
meet = bottomMeet
117-
const y = bottomMeet.getBoundingClientRect().y
118-
if (e.clientY < y) {
119-
insertTpye = 'before'
120-
} else {
121-
insertTpye = 'in'
122-
}
123-
} else {
124-
insertTpye = meet = null
125-
}
124+
insertTpye = meet = null
126125
}
127-
if (meet) insertPreview(meet, insertTpye)
128-
}, 100)
129-
)
126+
}
127+
if (meet) insertPreview(meet, insertTpye)
128+
})
130129
}

0 commit comments

Comments
 (0)