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

React中vis.js Network操作工具栏自定义问题求助

React中vis.js Network操作工具栏自定义及提示文本修改方案

一、自定义左上角添加节点/边按钮

vis.js默认操作工具栏无直接配置项支持自定义,可通过禁用默认按钮+自定义按钮绑定vis.js操作模式实现:

  1. 修改配置,禁用默认按钮
const options = {
  interaction: { hover: true },
  manipulation: { 
    enabled: true, 
    addEdge: false, // 关闭默认添加边按钮
    addNode: false  // 关闭默认添加节点按钮
  },
  nodes: {
    borderWidth: 4,
    size: 30,
    color: {
      border: "#222222",
      background: "#666666",
    },
    font: { color: "#c51717" },
  },
  edges: {
    color: "lightgray",
  },
}
  1. 在React组件中实现自定义工具栏并绑定操作
import { useEffect, useRef } from 'react';
import { Network } from 'vis-network';

function NetworkComponent({ data }) {
  const containerRef = useRef(null);
  const networkRef = useRef(null);

  useEffect(() => {
    if (containerRef.current) {
      networkRef.current = new Network(containerRef.current, data, options);
    }
  }, [data]);

  // 触发添加节点模式
  const handleAddNode = () => {
    networkRef.current.addNodeMode();
  };

  // 触发添加边模式
  const handleAddEdge = () => {
    networkRef.current.addEdgeMode();
  };

  return (
    <div style={{ position: 'relative' }}>
      {/* 自定义工具栏 */}
      <div className="custom-toolbar">
        <button onClick={handleAddNode}>添加节点</button>
        <button onClick={handleAddEdge}>添加连接</button>
      </div>
      {/* vis.js画布容器 */}
      <div ref={containerRef} style={{ width: '100%', height: '600px' }} />
    </div>
  );
}
  1. 自定义工具栏样式(可选)
.custom-toolbar {
  position: absolute;
  top: 10px;
  left: 10px;
  z-index: 1000;
}
.custom-toolbar button {
  margin-right: 8px;
  padding: 6px 12px;
  border: none;
  border-radius: 4px;
  background: #2385bb;
  color: #fff;
  cursor: pointer;
}

二、修改添加边时的提示文本

方案1:覆盖vis.js内置语言包(推荐)

直接修改vis.js的国际化翻译文本,无需DOM操作:

import { Network } from 'vis-network';

// 在初始化Network前覆盖翻译
Network.prototype.translations.addEdge = '请先点击起始节点,再点击目标节点创建连接';
// 如需修改添加节点提示,可同步修改
// Network.prototype.translations.addNode = '点击画布空白处添加节点';

// 初始化Network
const network = new Network(container, data, options);

方案2:DOM操作修改提示元素

通过监听模式切换事件,动态修改生成的提示DOM:

useEffect(() => {
  if (!networkRef.current) return;
  
  const network = networkRef.current;
  
  // 进入添加边模式时修改提示
  network.on('addEdgeMode', () => {
    setTimeout(() => {
      const tooltip = document.querySelector('.vis-manipulation-tooltip');
      if (tooltip) {
        tooltip.innerHTML = '请点击两个节点完成连接创建';
      }
    }, 0); // 延迟确保DOM已生成
  });

  // 退出模式时重置提示(可选)
  network.on('exitEdgeMode', () => {
    const tooltip = document.querySelector('.vis-manipulation-tooltip');
    if (tooltip) tooltip.innerHTML = '';
  });

  return () => {
    network.off('addEdgeMode');
    network.off('exitEdgeMode');
  };
}, []);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:40:10