(三)kityMinder如何实现节点间的跳转

本文章系列将会记录在做kityminder二次开发过程中,遇到的问题以及解决方法

有同事反馈需要脑图能够支持类似于xmind中的节点中的跳转的功能,但是实际上节点目前支持的链接方式只是支持跳转到外部的链接上去而已,并不能够支持节点间跳转的功能。

思考

其实想要实现这个功能,并不是很复杂,因为我们想要一个逻辑,只要在待跳转的节点中,定义好需要跳转到节点的id的数据,然后我们需要有个图标响应点击操作,其实整个流程就非常的顺理成章了。

定义一个图标

关于图标的定义可能需要参考下关于测试结果中图标的定义,我们可以看下这块是如何去声明一个图表出来的。

pass = new kity.Path().setTranslate( - 10, -10).setPathData("M15.812,7.896l-6.75,6.75l-4.5-4.5L6.25,8.459l2.812,2.803l5.062-5.053L15.812,7.896z").fill("#EEE")

如上就是一个通过图标的定义, 其实就是一个svg的定义即可,所以我们就可以照猫画虎的处理,定义好NodeLinkIcon

var NodeLInkIcon = kity.createClass('NodeLinkIcon', {
    base: kity.Group,
    constructor: function (value) {
        this.callBase()
        this.setSize(20)
        this.create()
        this.setValue(value)
        this.setId(utils.uuid('node_link'))
        this.translate(0.5, 0.5)
    },
    setSize: function (size) {
        this.width = this.height = size
    },
    create: function () {
        var default_circle = new kity.Circle(9).fill("#FFED83").setOpacity(.1)
        nodeLink = new kity.Path().setTranslate(- 10, -10).setScale(.02).setPathData("M307.2 307.2a204.8 204.8 0 0 0 0 409.6h102.4a34.133333 34.133333 0 1 1 0 68.266667H307.2A273.066667 273.066667 0 1 1 307.2 238.933333h102.4a34.133333 34.133333 0 1 1 0 68.266667H307.2z m273.066667-34.133333a34.133333 34.133333 0 0 1 34.133333-34.133334h102.4a273.066667 273.066667 0 1 1 0 546.133334h-102.4a34.133333 34.133333 0 1 1 0-68.266667h102.4a204.8 204.8 0 0 0 0-409.6h-102.4a34.133333 34.133333 0 0 1-34.133333-34.133333z m-307.2 238.933333a34.133333 34.133333 0 0 1 34.133333-34.133333h409.6a34.133333 34.133333 0 1 1 0 68.266666H307.2a34.133333 34.133333 0 0 1-34.133333-34.133333z").fill("#666")
        this.addShapes([default_circle, nodeLink])
        this.nodeLink = nodeLink
    },
    setValue: function (value) {
        this.nodeLink.setVisible(null !== value && value !== '');
    }
})

处理点击响应事件并做跳转

这里我们只要在节点的render逻辑中实例化出icon。并且实现click的方法。如下做的内容即获取到nodeLink中的值,即要跳转的节点的id值,进行选中以及居中的操作。

var nodeIcon = new NodeLInkIcon();
nodeIcon.setStyle('cursor', 'pointer');
nodeIcon.on("click", function () {
    minder.selectById(node.getData().nodeLink, true);
    var nodes = window.minder.getNodesById(node.getData().nodeLink);
    if (nodes !== null && nodes.length !== 0) {
        window.minder.execCommand('Camera', nodes[0], 0);
        if (!nodes[0].isExpanded()) window.minder.execCommand('Expand', true);
    }
});
return nodeIcon;

PS:至于节点的nodeLink值如何被赋值,这个就比较简单些了,这里就不在说明了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值