如何在vis.js的groups列中显示图片(附效果示例)
嘿,这就教你怎么在vis.js的groups里实现带图片的显示效果,和你示例图里的样子完全匹配!
核心思路
要实现这个效果,我们主要利用vis.js支持HTML格式的分组标签,以及可选的节点图片配置——前者用来让分组的图例/标题旁显示图片,后者可以让同组节点统一显示图片图标。
具体步骤&代码示例
1. 准备资源
先把要用到的图片准备好,确保路径可访问(可以是本地相对路径、CDN地址,甚至base64编码的图片)。
2. 编写代码
首先引入vis.js的库(如果还没引入的话),然后配置分组和节点:
<!-- 先引入vis.js --> <script src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script> <!-- 网络容器 --> <div id="network" style="width: 100%; height: 600px;"></div>
// 1. 定义节点数据,指定每个节点所属分组 const nodes = new vis.DataSet([ { id: 1, label: "前端节点", group: "frontend" }, { id: 2, label: "UI节点", group: "frontend" }, { id: 3, label: "后端节点", group: "backend" }, { id: 4, label: "数据库节点", group: "backend" } ]); // 2. 配置Groups,重点是用HTML作为分组标签 const groups = { frontend: { // 分组标签用HTML插入图片+文字,通过inline CSS调整样式 label: '<img src="path/to/frontend-icon.png" style="width:22px; height:22px; vertical-align:middle; margin-right:6px;"> 前端组', // 可选:让同组节点显示统一图片图标 shape: "circularImage", // 圆形图片,也可选image(方形) image: "path/to/frontend-node-icon.png", size: 32 }, backend: { label: '<img src="path/to/backend-icon.png" style="width:22px; height:22px; vertical-align:middle; margin-right:6px;"> 后端组', shape: "circularImage", image: "path/to/backend-node-icon.png", size: 32 } }; // 3. 配置网络选项,开启图例(图例会自动同步分组的带图标签) const options = { groups: groups, legend: { enabled: true, position: "right" // 图例位置,可选top/left/right/bottom }, // 其他可选配置,比如节点颜色、布局等 nodes: { borderWidth: 2 } }; // 4. 初始化网络实例 const container = document.getElementById("network"); const network = new vis.Network(container, { nodes }, options);
关键注意点
- 图片路径问题:如果用本地图片,确保路径是相对HTML文件的正确路径;如果遇到跨域问题,可以把图片转成base64编码直接嵌入。
- 样式调整:通过inline CSS可以调整图片的大小、间距、对齐方式,让它和文字搭配更协调。
- 节点图片可选:如果不需要同组节点显示图片,只保留
label的HTML配置即可,图例依然会显示带图的分组标题。
这样配置后,你就能得到和示例图一样的、分组旁带图片的效果啦!
内容的提问来源于stack exchange,提问作者Dorian Seguin




