Skip to content

Commit f87886c

Browse files
committed
fix plugin draggable
1 parent f2d8a7a commit f87886c

File tree

4 files changed

+38
-28
lines changed

4 files changed

+38
-28
lines changed

src/examples/IDMode.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<template lang="pug">
33
div
44
h2 ID Mode
5-
Tree(:value="idModeData" unfoldAllAtBeginning idMode ref="tree3")
5+
Tree.id-mode-tree(:value="idModeData" unfoldAllAtBeginning idMode ref="tree3")
66
div(slot-scope="{node, meta, root}")
77
b(v-if="node.children && node.children.length > 0" @click="root.toggleFold(node)") {{meta.folded ? '+' : '-'}}&nbsp;
88
input(type="checkbox" v-model="meta.checked" @change="root.afterCheckChanged(node)")

src/examples/NodeBackTree.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template lang="pug">
22
.tree-children(:class="{'he-tree tree-root': isRoot}")
33
.tree-branch(v-for="(node, i) in nodes" :key="metas[i].id" :id="metas[i].DOMId")
4-
.tree-node(@mouseenter="NodeBack_onmouseenter" @mouseleave="NodeBack_onmouseleave")
4+
.tree-node(@mouseenter="showNodeBack(node)" @mouseleave="hideNodeBack(node)")
55
slot(:node="node" :meta="metas[i]" :root="root") {{node.text}}
66
transition(v-if="node.children && node.children.length > 0" :name="root.foldingTransition")
77
Tree(v-if="!metas[i].folded" :value="node.children" :privateProps="{...childPrivateProps, parent: node}")

src/plugins/NodeBack.vue

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,39 @@
22
import * as hp from 'helper-js'
33
export default {
44
methods: {
5-
NodeBack_onmouseenter(e) {
6-
const trigger = e.target
7-
const back = document.createElement('DIV')
8-
hp.addClass(back, 'node-back')
9-
const tree = hp.findParent(trigger, (el) => hp.hasClass(el, 'tree-root'))
10-
const treeRect = hp.getBoundingClientRect(tree)
11-
const treeOffset = hp.getOffset(tree)
12-
const triggerRect = hp.getBoundingClientRect(trigger)
13-
const triggerOffset = hp.getOffset(trigger)
14-
const backOffset = {x: treeOffset.x, y: triggerOffset.y}
15-
hp.prependTo(back, tree)
16-
const backPosition = hp.getPositionFromOffset(back, backOffset)
17-
back.style.top = `${backPosition.y}px`
18-
back.style.left = `${backPosition.x}px`
19-
back.style.width = `${treeRect.width}px`
20-
back.style.height = `${triggerRect.height}px`
21-
trigger._NodeBack_el = back
5+
showNodeBack(node) {
6+
const meta = this.getMetaByNode(node)
7+
const branch = document.getElementById(meta.DOMId)
8+
const nodeEl = branch.querySelector(`.tree-node`)
9+
if (!nodeEl._NodeBack_el) {
10+
const back = document.createElement('DIV')
11+
hp.addClass(back, 'node-back')
12+
nodeEl._NodeBack_el = back
13+
}
14+
const back = nodeEl._NodeBack_el
15+
const update = () => {
16+
const tree = hp.findParent(nodeEl, (el) => hp.hasClass(el, 'tree-root'))
17+
const treeRect = hp.getBoundingClientRect(tree)
18+
const treeOffset = hp.getOffset(tree)
19+
const nodeElRect = hp.getBoundingClientRect(nodeEl)
20+
const nodeElOffset = hp.getOffset(nodeEl)
21+
const backOffset = {x: treeOffset.x, y: nodeElOffset.y}
22+
hp.prependTo(back, tree)
23+
const backPosition = hp.getPositionFromOffset(back, backOffset)
24+
back.style.top = `${backPosition.y}px`
25+
back.style.left = `${backPosition.x}px`
26+
back.style.width = `${treeRect.width}px`
27+
back.style.height = `${nodeElRect.height}px`
28+
}
29+
update()
2230
},
23-
NodeBack_onmouseleave(e) {
24-
const trigger = e.target
25-
if (trigger._NodeBack_el) {
26-
hp.removeEl(trigger._NodeBack_el)
27-
trigger._NodeBack_el = null
31+
hideNodeBack(node) {
32+
const meta = this.getMetaByNode(node)
33+
const branch = document.getElementById(meta.DOMId)
34+
const nodeEl = branch.querySelector(`.tree-node`)
35+
if (nodeEl._NodeBack_el) {
36+
hp.removeEl(nodeEl._NodeBack_el)
37+
nodeEl._NodeBack_el = null
2838
}
2939
},
3040
},

src/plugins/draggable/draggable.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,18 @@ export default function makeTreeDraggable(treeEl, options = {}) {
9393
if (!movingElLooped) {
9494
elsBetweenMovingElAndTree.push(...elsToTree)
9595
}
96-
let outOfTree
9796
if (!tree) {
98-
outOfTree = true
97+
// out of tree
98+
return
9999
}
100100
// check tree if is covered, like modal
101101
let treeBeCoved
102102
if (elsBetweenMovingElAndTree && elsBetweenMovingElAndTree[0]) {
103-
if (!hp.isDescendantOf(elsBetweenMovingElAndTree[0], tree)) {
103+
if (elsBetweenMovingElAndTree[0] !== tree && !hp.isDescendantOf(elsBetweenMovingElAndTree[0], tree)) {
104104
treeBeCoved = true
105105
}
106106
}
107-
if (outOfTree || treeBeCoved) {
107+
if (treeBeCoved) {
108108
return
109109
}
110110
// if cross tree

0 commit comments

Comments
 (0)