mirror of
https://github.com/wanglin2/mind-map.git
synced 2026-02-21 10:27:44 +08:00
224 lines
7.1 KiB
JavaScript
224 lines
7.1 KiB
JavaScript
import { degToRad } from '../utils/'
|
|
|
|
export default {
|
|
top: {
|
|
renderExpandBtn({
|
|
node,
|
|
btn,
|
|
expandBtnSize,
|
|
translateX,
|
|
translateY,
|
|
width,
|
|
height
|
|
}) {
|
|
if (node.parent && node.parent.isRoot) {
|
|
btn.translate(
|
|
width * 0.3 - expandBtnSize / 2 - translateX,
|
|
-expandBtnSize / 2 - translateY
|
|
)
|
|
} else {
|
|
btn.translate(
|
|
width * 0.3 - expandBtnSize / 2 - translateX,
|
|
height + expandBtnSize / 2 - translateY
|
|
)
|
|
}
|
|
},
|
|
renderLine({
|
|
node,
|
|
line,
|
|
top,
|
|
x,
|
|
lineLength,
|
|
height,
|
|
expandBtnSize,
|
|
maxy,
|
|
ctx
|
|
}) {
|
|
if (node.parent && node.parent.isRoot) {
|
|
line.plot(
|
|
`M ${x},${top} L ${x + lineLength},${
|
|
top - Math.tan(degToRad(ctx.mindMap.opt.fishboneDeg)) * lineLength
|
|
}`
|
|
)
|
|
} else {
|
|
line.plot(`M ${x},${top + height + expandBtnSize} L ${x},${maxy}`)
|
|
}
|
|
},
|
|
computedLeftTopValue({ layerIndex, node, ctx }) {
|
|
if (layerIndex >= 1 && node.children) {
|
|
// 遍历三级及以下节点的子节点
|
|
let marginY = ctx.getMarginY(layerIndex + 1)
|
|
let startLeft = node.left + node.width * ctx.childIndent
|
|
let totalTop =
|
|
node.top +
|
|
node.height +
|
|
(ctx.getNodeActChildrenLength(node) > 0 ? node.expandBtnSize : 0) + marginY
|
|
node.children.forEach(item => {
|
|
item.left = startLeft
|
|
item.top += totalTop
|
|
totalTop +=
|
|
item.height +
|
|
(ctx.getNodeActChildrenLength(item) > 0 ? item.expandBtnSize : 0) + marginY
|
|
})
|
|
}
|
|
},
|
|
adjustLeftTopValueBefore({ node, parent, ctx, layerIndex }) {
|
|
// 调整top
|
|
let len = node.children.length
|
|
let marginY = ctx.getMarginY(layerIndex + 1)
|
|
// 调整三级及以下节点的top
|
|
if (parent && !parent.isRoot && len > 0) {
|
|
let totalHeight = node.children.reduce((h, item) => {
|
|
return (
|
|
h +
|
|
item.height +
|
|
(ctx.getNodeActChildrenLength(item) > 0 ? item.expandBtnSize : 0) + marginY
|
|
)
|
|
}, 0)
|
|
ctx.updateBrothersTop(node, totalHeight)
|
|
}
|
|
},
|
|
adjustLeftTopValueAfter({ parent, node, ctx }) {
|
|
// 将二级节点的子节点移到上方
|
|
if (parent && parent.isRoot) {
|
|
// 遍历二级节点的子节点
|
|
let marginY = ctx.getMarginY(node.layerIndex + 1)
|
|
let totalHeight = node.expandBtnSize + marginY
|
|
node.children.forEach(item => {
|
|
// 调整top
|
|
let nodeTotalHeight = ctx.getNodeAreaHeight(item)
|
|
let _top = item.top
|
|
let _left = item.left
|
|
item.top =
|
|
node.top - (item.top - node.top) - nodeTotalHeight + node.height
|
|
// 调整left
|
|
item.left = node.left + node.width * ctx.indent + (nodeTotalHeight + totalHeight) / Math.tan(degToRad(ctx.mindMap.opt.fishboneDeg))
|
|
totalHeight += nodeTotalHeight
|
|
// 同步更新后代节点
|
|
ctx.updateChildrenPro(item.children, {
|
|
top: item.top - _top,
|
|
left: item.left - _left
|
|
})
|
|
})
|
|
}
|
|
}
|
|
},
|
|
bottom: {
|
|
renderExpandBtn({
|
|
node,
|
|
btn,
|
|
expandBtnSize,
|
|
translateX,
|
|
translateY,
|
|
width,
|
|
height
|
|
}) {
|
|
if (node.parent && node.parent.isRoot) {
|
|
btn.translate(
|
|
width * 0.3 - expandBtnSize / 2 - translateX,
|
|
height + expandBtnSize / 2 - translateY
|
|
)
|
|
} else {
|
|
btn.translate(
|
|
width * 0.3 - expandBtnSize / 2 - translateX,
|
|
-expandBtnSize / 2 - translateY
|
|
)
|
|
}
|
|
},
|
|
renderLine({ node, line, top, x, lineLength, height, miny, ctx }) {
|
|
if (node.parent && node.parent.isRoot) {
|
|
line.plot(
|
|
`M ${x},${top + height} L ${x + lineLength},${
|
|
top + height + Math.tan(degToRad(ctx.mindMap.opt.fishboneDeg)) * lineLength
|
|
}`
|
|
)
|
|
} else {
|
|
line.plot(`M ${x},${top} L ${x},${miny}`)
|
|
}
|
|
},
|
|
computedLeftTopValue({ layerIndex, node, ctx }) {
|
|
let marginY = ctx.getMarginY(layerIndex + 1)
|
|
if (layerIndex === 1 && node.children) {
|
|
// 遍历二级节点的子节点
|
|
let startLeft = node.left + node.width * ctx.childIndent
|
|
let totalTop =
|
|
node.top +
|
|
node.height +
|
|
(ctx.getNodeActChildrenLength(node) > 0 ? node.expandBtnSize : 0) + marginY
|
|
|
|
node.children.forEach(item => {
|
|
item.left = startLeft
|
|
item.top =
|
|
totalTop +
|
|
(ctx.getNodeActChildrenLength(item) > 0 ? item.expandBtnSize : 0)
|
|
totalTop +=
|
|
item.height +
|
|
(ctx.getNodeActChildrenLength(item) > 0 ? item.expandBtnSize : 0) + marginY
|
|
})
|
|
}
|
|
if (layerIndex > 1 && node.children) {
|
|
// 遍历三级及以下节点的子节点
|
|
let startLeft = node.left + node.width * ctx.childIndent
|
|
let totalTop =
|
|
node.top -
|
|
(ctx.getNodeActChildrenLength(node) > 0 ? node.expandBtnSize : 0) - marginY
|
|
node.children.forEach(item => {
|
|
item.left = startLeft
|
|
item.top = totalTop - item.height
|
|
totalTop -=
|
|
item.height +
|
|
(ctx.getNodeActChildrenLength(item) > 0 ? item.expandBtnSize : 0) + marginY
|
|
})
|
|
}
|
|
},
|
|
adjustLeftTopValueBefore({ node, ctx, layerIndex }) {
|
|
// 调整top
|
|
let marginY = ctx.getMarginY(layerIndex + 1)
|
|
let len = node.children.length
|
|
if (layerIndex > 2 && len > 0) {
|
|
let totalHeight = node.children.reduce((h, item) => {
|
|
return (
|
|
h +
|
|
item.height +
|
|
(ctx.getNodeActChildrenLength(item) > 0 ? item.expandBtnSize : 0) + marginY
|
|
)
|
|
}, 0)
|
|
ctx.updateBrothersTop(node, -totalHeight)
|
|
}
|
|
},
|
|
adjustLeftTopValueAfter({ parent, node, ctx }) {
|
|
// 将二级节点的子节点移到上方
|
|
if (parent && parent.isRoot) {
|
|
// 遍历二级节点的子节点
|
|
let marginY = ctx.getMarginY(node.layerIndex + 1)
|
|
let totalHeight = 0
|
|
let totalHeight2 = node.expandBtnSize
|
|
node.children.forEach(item => {
|
|
// 调整top
|
|
let hasChildren = ctx.getNodeActChildrenLength(item) > 0
|
|
let nodeTotalHeight = ctx.getNodeAreaHeight(item)
|
|
let offset =
|
|
hasChildren
|
|
? nodeTotalHeight -
|
|
item.height -
|
|
(hasChildren ? item.expandBtnSize : 0)
|
|
: 0
|
|
offset -= (hasChildren ? marginY : 0)
|
|
let _top = totalHeight + offset
|
|
let _left = item.left
|
|
item.top += _top
|
|
// 调整left
|
|
item.left = node.left + node.width * ctx.indent + (nodeTotalHeight + totalHeight2) / Math.tan(degToRad(ctx.mindMap.opt.fishboneDeg))
|
|
totalHeight += offset
|
|
totalHeight2 += nodeTotalHeight
|
|
// 同步更新后代节点
|
|
ctx.updateChildrenPro(item.children, {
|
|
top: _top,
|
|
left: item.left - _left
|
|
})
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|