You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jsMind库为思维导图节点添加Tooltip(提示框)?

给jsMind节点添加提示框的实现方案

jsMind本身没有内置提示框的专属配置项,但可以通过两种实用方式实现需求:

方案1:利用原生HTML title 属性(最简实现)

直接在节点数据中添加title字段,浏览器会自动绑定为DOM元素的原生提示框,鼠标悬停时自动显示。

修改你的节点数据示例:

var mind = {
    meta: {
        name: 'jsMind remote',
        author: 'hizzgdev@163.com',
        version: '0.2',
    },
    format: 'node_tree',
    data: {
        id: 'root',
        topic: 'jsMind',
        children: [
            {
                id: 'easy',
                topic: 'Easy',
                direction: 'left',
                children: [
                    { 
                        id: 'easy1', 
                        topic: 'Easy to show',
                        title: '该节点用于展示jsMind的快速渲染能力' // 新增原生提示属性
                    },
                    {
                        'id': 'other3',
                        'topic': '', // 图片节点需保留topic字段(可空),确保鼠标事件正常触发
                        'background-image': 'ant.png',
                        'width': '100',
                        'height': '100',
                        title: '这是一个自定义图片节点'
                    },
                ],
            },
            {
                id: 'open',
                topic: 'Open Source',
                direction: 'right',
                children: [
                    {
                        'id': 'open2',
                        'topic': 'BSD License',
                        'leading-line-color': '#ff33ff',
                        title: 'jsMind采用BSD开源协议,可自由商用'
                    },
                ],
            }
        ]
    }
};
_jm.show(mind);

方案2:自定义样式提示框(高度灵活)

如果需要自定义提示框的外观、交互逻辑,可以通过监听jsMind的节点事件实现:

步骤1:添加自定义提示框CSS

.jsmind-custom-tooltip {
    position: absolute;
    background-color: #2c3e50;
    color: #fff;
    padding: 8px 12px;
    border-radius: 4px;
    font-size: 14px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.3);
    display: none;
    z-index: 9999;
    pointer-events: none;
}

步骤2:修改JS代码,绑定事件逻辑

// 定义思维导图数据(新增自定义提示字段`tooltip_content`)
var mind = {
    meta: {
        name: 'jsMind remote',
        author: 'hizzgdev@163.com',
        version: '0.2',
    },
    format: 'node_tree',
    data: {
        id: 'root',
        topic: 'jsMind',
        children: [
            {
                id: 'easy',
                topic: 'Easy',
                direction: 'left',
                children: [
                    { 
                        id: 'easy1', 
                        topic: 'Easy to show',
                        tooltip_content: '自定义提示:jsMind支持多种节点样式配置'
                    },
                    {
                        'id': 'other3',
                        'topic': '',
                        'background-image': 'ant.png',
                        'width': '100',
                        'height': '100',
                        tooltip_content: '图片节点支持自定义尺寸与背景图'
                    },
                ],
            },
            {
                id: 'open',
                topic: 'Open Source',
                direction: 'right',
                children: [
                    {
                        'id': 'open2',
                        'topic': 'BSD License',
                        'leading-line-color': '#ff33ff',
                        tooltip_content: 'BSD协议允许修改后闭源商用,只需保留原版权声明'
                    },
                ],
            }
        ]
    }
};

// 渲染思维导图
_jm.show(mind);

// 创建自定义提示框元素
const customTooltip = document.createElement('div');
customTooltip.className = 'jsmind-custom-tooltip';
document.body.appendChild(customTooltip);

// 监听节点鼠标移入事件
_jm.add_event_listener('node_mouseover', function(event) {
    const targetNode = event.node;
    if (targetNode.data.tooltip_content) {
        customTooltip.textContent = targetNode.data.tooltip_content;
        customTooltip.style.display = 'block';
        // 定位提示框到鼠标偏移位置
        customTooltip.style.left = `${event.event.clientX + 15}px`;
        customTooltip.style.top = `${event.event.clientY + 15}px`;
    }
});

// 监听节点鼠标移出事件
_jm.add_event_listener('node_mouseout', function() {
    customTooltip.style.display = 'none';
});

// 可选:监听鼠标移动,让提示框跟随鼠标
_jm.add_event_listener('node_mousemove', function(event) {
    if (customTooltip.style.display === 'block') {
        customTooltip.style.left = `${event.event.clientX + 15}px`;
        customTooltip.style.top = `${event.event.clientY + 15}px`;
    }
});

关键注意点

  • 方案1兼容性拉满,但样式无法自定义;方案2可完全控制提示框的外观与交互。
  • 纯图片节点需保留topic字段(即使为空),否则可能无法触发鼠标事件。
  • 自定义字段名称可自由调整,只需保证节点数据与事件逻辑中的字段名一致即可。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:25:24