当前位置: 首页 > article >正文

antvX6自定义 HTML 节点创建与更新教程

自定义 HTML 节点创建与更新教程

本文详细介绍如何利用 HTML、CSS 和 JavaScript 创建自定义节点,并通过动态更新节点数据来改变节点显示效果。无论你是否有前端基础,都能轻松跟着本教程一步步实现。


1. 基础样式设置

首先,使用 CSS 定义基础样式,确保整个页面及节点内的文字、链接、按钮等元素呈现出整洁美观的效果。

:root {line-height: 1.5;font-weight: 400;font-synthesis: none;text-rendering: optimizeLegibility;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;-webkit-text-size-adjust: 100%;
}a {font-weight: 500;color: #646cff;text-decoration: inherit;
}
a:hover {color: #535bf2;
}body {margin: 0;
}

2. 自定义节点 HTML 结构与样式

我们将自定义节点设计为左右分栏结构:

左侧:显示图标(图片)

右侧:显示文本信息(如节点标题)

2.1 HTML 结构示例

<div class="cu_html_container"><img class="cu_html_top" src="icon.png" alt="节点图标" /><div class="cu_html_text"><div class="cu_html_title">节点标题</div></div>
</div>

2.2 对应的 CSS 样式


.cu_html_container {display: flex;              /* 使用 flexbox 实现水平排列 */flex-direction: row;align-items: center;        /* 垂直居中对齐 */justify-content: flex-start;background: white;border: 1px solid #ddd;border-radius: 2px;padding: 8px;height: 50px;               /* 固定高度 */box-shadow: 0 5px 8px rgba(128, 145, 165, 0.1);
}.cu_html_top {width: 30px;                /* 图标宽度 */height: 30px;               /* 图标高度 */margin-right: 10px;         /* 图标与文本之间的间距 */
}.cu_html_text {display: flex;flex-direction: row;align-items: center;flex: 1;                    /* 占满剩余空间 */white-space: nowrap;        /* 防止文本换行 */overflow: hidden;text-overflow: ellipsis;    /* 超出部分用省略号显示 */
}.cu_html_title {font-size: 14px;font-weight: 500;color: #333;line-height: 1.2;overflow: hidden;text-overflow: ellipsis;
}

3. 动态更新节点状态

利用 JavaScript,我们可以根据节点的状态动态更新节点的图标显示。下面的代码示例展示了如何实现这一功能。

export const updateNodeImage = (cell, releaseState) => {// 判断节点状态:若 releaseState 为 "-2" 或 "0" 则表示离线状态const isOffline = releaseState === "-2" || releaseState === "0";// 根据状态选择对应的图片路径const imagePath = isOffline ? '/assets/system/images/dpp/xx.png' : '/assets/system/images/dpp/sx.png';// 获取当前节点数据const currentData = cell.getData();// 构建更新后的数据const newData = {...currentData,releaseState: releaseState,taskParams: {...currentData.taskParams,imagePath: imagePath}};// 更新节点数据cell.setData(newData);
};

说明:

releaseState:用于表示节点当前状态;若值为 “-2” 或 “0” 则认为节点离线。

imagePath:根据节点状态选用对应的图片资源(离线图标或在线图标)。

cell.getData() / cell.setData():分别用于获取和更新节点的数据。

4. 注册自定义节点到 AntV X6

为了在 AntV X6 图形库中使用自定义节点,我们需要通过其 API 将自定义节点注册。下面的代码展示了如何定义节点的 HTML 结构和图标处理逻辑。

export const useHtmlNode = (node) => {Shape.HTML.register({shape: 'cu-data-node',  // 自定义节点类型名称width: 180,height: 60,html(cell) {// 解构节点数据const { name: nodeName, icon, releaseState, taskParams } = cell.getData();// 创建节点外层容器const htmlContainer = document.createElement('div');htmlContainer.setAttribute('class', 'cu_html_container');// 创建图标元素const htmlTop = document.createElement('img');htmlTop.setAttribute('class', 'cu_html_top');// 图标处理:优先使用 taskParams.icon,否则使用 icon 字段let iconSrc = taskParams.icon || icon;if (iconSrc && iconSrc.startsWith('data:image')) {htmlTop.setAttribute('src', iconSrc);} else if (iconSrc) {// 如果图标不是 base64 格式,则进行转换DataUri.imageToDataUri(iconSrc, function (nu, url) {htmlTop.src = url;// 将转换后的 base64 图标存回节点数据中const newData = {...cell.getData(),taskParams: { ...taskParams, icon: url }};cell.setData(newData);});}// 创建文本区域const htmlText = document.createElement('div');htmlText.setAttribute('class', 'cu_html_text');// 创建并设置节点标题const htmlTitle = document.createElement('div');htmlTitle.setAttribute('class', 'cu_html_title');htmlTitle.innerText = nodeName;// 组合文本区域和图标到容器中htmlText.appendChild(htmlTitle);htmlContainer.appendChild(htmlTop);htmlContainer.appendChild(htmlText);return htmlContainer;}});
};

Shape.HTML.register:AntV X6 提供的接口,用于注册自定义 HTML 节点。

该函数定义了节点的宽度、高度和 HTML 生成逻辑,确保节点的图标与文本能够正确显示。

图标来源优先取自 taskParams.icon,若不存在则使用 icon 字段。

5. 总结

通过本教程,你学会了如何:

使用 CSS 设置基础样式和布局;

构建一个包含图标和文本的自定义 HTML 节点;

利用 JavaScript 动态更新节点状态(如上下线状态)来改变图标显示;

将自定义节点注册到 AntV X6 图形库中,方便在可视化图表中使用。

这种方法不仅使节点外观得以灵活定制,还能实时响应状态变化,提升交互性和用户体验。希望本教程能帮助你快速上手,实现个性化的图表展示!

相关文章:

antvX6自定义 HTML 节点创建与更新教程

自定义 HTML 节点创建与更新教程 本文详细介绍如何利用 HTML、CSS 和 JavaScript 创建自定义节点&#xff0c;并通过动态更新节点数据来改变节点显示效果。无论你是否有前端基础&#xff0c;都能轻松跟着本教程一步步实现。 1. 基础样式设置 首先&#xff0c;使用 CSS 定义基…...

【Android】界面布局-线性布局LinearLayout-例子

线性布局&#xff08;LinearLayout&#xff09;是一种重要的界面布局中&#xff0c;也是经常使用到的一种界面布局 • 在线性布局中&#xff0c;所有的子元素都按照垂直或水平的顺序在界面上排列 ➢如果垂直排列&#xff0c;则每行仅包含一个界面元素 ➢如果水平排列&…...

Cortex-M 上编写汇编函数

在 ARM Cortex-M 系列单片机中使用汇编语言编写函数时,需要特别注意寄存器的使用、栈管理、调用约定以及与 C 语言的兼容性。以下是关键注意事项和示例说明: 1. 遵循 AAPCS 调用约定 ARM 定义了 AAPCS(ARM Architecture Procedure Call Standard),规定了函数调用时寄存器…...

windows技术基础知识

NT架构 NT 就是new techonology 的英文单词缩写&#xff0c;是微软1993年推出操作系统的重大升级&#xff0c;如内存管理&#xff0c;安全机制&#xff0c;多任务&#xff0c;多线程支持。在此之前操作系统都是基于MS-DOS上面的图形化界面&#xff0c;只有有限的内存管理和多任…...

在 Windows 环境下使用 VSCode 和 TinyGo 开发 ESP8266(NodeMcu) or STM32

支持的型号 https://tinygo.org/docs/reference/microcontrollers/ 1. 安装Go 2. 安装TinyGo&#xff0c;并添加环境变量 https://github.com/tinygo-org/tinygo/releases 3. VSCode配置&#xff0c;安装插件&#xff0c;选择设备 package mainimport ("machine"&q…...

计算机视觉算法实战——基于YOLOv8的汽车试验场积水路段识别系统

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 引言&#xff1a;汽车试验场智能化管理的迫切需求 在现代汽车研发流程中&#xff0c;试验场作为验证车辆性…...

One API:LLM API 管理 分发系统,github 24.2K Star!

随着人工智能领域的不断发展&#xff0c;国内外各大厂商纷纷推出了自己的 AI 大模型。面对 DeepSeek、OpenAI、Claude、腾讯元宝等众多平台的 API 接口差异&#xff0c;开发者常常需要花费大量时间调整代码、处理密钥管理与流量调控。One API 正是在这种背景下诞生&#xff0c;…...

Android Settings 有线网设置界面优化

Android Settings 有线网设置界面优化 文章目录 Android Settings 有线网设置界面优化一、前言二、简单修改1、修改的EthernetSettings代码&#xff1a;2、有线网ip获取代码&#xff1a;3、AndroidManifest.xml定义有线网的Activity4、修改后界面&#xff1a; 三、其他1、有线网…...

正则入门到精通

​ 一、正则表达式入门​ 正则表达式本质上是一串字符序列&#xff0c;用于定义一个文本模式。通过这个模式&#xff0c;我们可以指定要匹配的文本特征。例如&#xff0c;如果你想匹配一个以 “abc” 开头的字符串&#xff0c;正则表达式可以写作 “^abc”&#xff0c;其中 …...

微信小程序基于Canvas实现头像图片裁剪(上)

序言 嘿&#xff0c;打工人混迹职场这么久&#xff0c;图片处理肯定都没少碰。不过咱说实话&#xff0c;大部分时候都是直接 “抄近道”&#xff0c;用现成的三方组件&#x1f60f;。就像我&#xff0c;主打一个会用工具&#xff0c;毕竟善用工具可是咱人类的 “超能力”&…...

Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)

一、Logback 在 Spring Boot 中&#xff0c;日志框架默认使用的是 Logback&#xff0c;Spring Boot 提供了对日志配置的简化 Spring Boot 默认会将日志输出到控制台&#xff0c;并且日志级别为 INFO 可以在 application.yaml 或 application.properties 文件中进行日志配置 …...

基于VMware的Cent OS Stream 8安装与配置及远程连接软件的介绍

1.VMware Workstation 简介&#xff1a; VMware Workstation&#xff08;中文名“威睿工作站”&#xff09;是一款功能强大的桌面虚拟计算机软件&#xff0c;提供用户可在单一的桌面上同时运行不同的操作系统&#xff0c;和进行开发、测试 、部署新的应用程序的最佳解决方案。…...

Ubuntu环境基于Ollama部署DeepSeek+Open-Webui实现本地部署大模型-无脑部署

Ollama介绍 Ollama是一款简单好用的模型部署工具,不仅可以部署DeepSeek,市面上开源模型大部分都可以一键部署,这里以DeepSeek为例 官网 DeepSeek 版本硬件要求 安装Ollama 环境 sudo apt update sudo apt install curl sudo apt install lsof1.命令一键安装 在官网点击…...

goto在Java中的用法

说明&#xff1a;goto 在一些编程语言&#xff08;如C语言&#xff09;中&#xff0c;是用来表示跳转的&#xff0c;即代码执行到此处跳转到对应位置继续执行。 举例 举个例子&#xff0c;如下&#xff0c;是一个双层嵌套循环。现在我需要代码在内层循环符合某条件时跳出双层…...

Vue3+Vite+TypeScript+Element Plus开发-03.主页设计与router配置

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 文章目录 目录 系列文档目录 文章目录 前言 一、主页设计 二、配置代替别名 三、配置router 四、运行效果 五、参考文献 前言 本文将重点介绍如何使用…...

linux gcc

一、常用编译选项 ​基本编译 gcc [input].c -o [output] ​示例&#xff1a; gcc hello.c -o hello # 将 hello.c 编译为可执行文件 hello ./hello # 运行程序 ​分步编译 预处理&#xff1a;-E&#xff08;生成 .i 文件&#xff09; gcc -E hello.c -o hello…...

无限滚动(Infinite Scroll)页面谷歌不收录!必须改回分页吗?

近三年&#xff0c;全球超过58%的网站采用无限滚动设计&#xff08;数据来源&#xff1a;PageTraffic 2023&#xff09; 谷歌官方数据显示&#xff0c;动态加载内容的索引失败率高达73%&#xff08;Google Webmaster Report 2022&#xff09;&#xff0c;而采用纯无限滚动的页…...

出现次数超过一半的数(信息学奥赛一本通-1186)

【题目描述】 给出一个含有n&#xff08;0 < n < 1000&#xff09;个整数的数组&#xff0c;请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。 【输入】 第一行包含一个整数n&#xff0c;表示数组大小&#xff1b; 第二行包含n个整数&#xff0c;分别是数组…...

Git相关笔记1 - 本地文件上传远程仓库

Git相关笔记 目录 Git相关笔记Git上传相关文件第一步创建一个仓库&#xff1a;第二步本地创建空文件夹&#xff1a;第三步开始在gitbush上传文件&#xff1a;解决外网网络连接的问题&#xff1a;中文文件的编码问题&#xff1a;参考资料 Git上传相关文件 第一步创建一个仓库&a…...

Linux_4

开始学习ssh工具 在做开发的时候,肯定不止一台服务器,那么假设每台服务器都是Linux服务器,要在服务器上操作就需要登入终端,即Terminal。ssh的作用就是可以通过一个服务器登陆上其他的服务器。 登陆到哪个服务器看到的就是哪个服务器的终端terminal。 ssh登陆 ssh user@…...

如何计算财富自由所需要的价格?

写在前面&#xff1a;​【财富自由计算器】已上线&#xff0c;快算算财富自由要多少​ 多少钱&#xff0c;才能实现你的财富梦想&#xff1f; 需要多少&#xff0c;才能实现财务安全、财务独立&#xff0c;甚至财务自由&#xff1f; 看到结尾&#xff0c;你会很清楚地看到&…...

thinkphp每条一级栏目中可自定义添加多条二级栏目,每条二级栏目包含多个字段信息

小程序客户端需要展示团购详情这种结构的内容,后台会新增多条套餐,每条套餐可以新增多条菜品信息,每条菜品信息包含菜品名称,价格,份数等字段信息,类似于购物网的商品多规格属性,数据表中以json类型存储,手写了一个后台添加和编辑的demo 添加页面 编辑页面(json数据…...

Perl语言的文件系统

Perl语言中的文件系统操作 引言 在软件开发中&#xff0c;文件系统操作是一个不可或缺的部分。无论是简单的文件读取、写入&#xff0c;还是复杂的文件管理&#xff0c;合理的文件系统操作都能极大提升程序的效率和可维护性。Perl语言是一种强大的文本处理语言&#xff0c;凭…...

深入解析ARM与RISC-V架构的Bring-up核心流程

深入解析ARM与RISC-V架构的Bring-up核心流程 作者&#xff1a;嵌入式架构探索者 | 2023年10月 引言 在嵌入式开发中&#xff0c;处理器的Bring-up&#xff08;启动初始化&#xff09;是系统运行的第一道门槛。ARM和RISC-V作为两大主流架构&#xff0c;其Bring-up流程既有共性…...

关于UDP端口扫描概述

尽管互联网上大多数流行服务都基于 TCP 协议运行&#xff0c;但 UDP 服务也广泛部署。DNS、SNMP 和 DHCP&#xff08;注册端口 53、161/162 和 67/68&#xff09;是最常见的服务之一。 由于 UDP 扫描通常比 TCP 扫描更慢、更困难&#xff0c;一些安全审计人员可能会忽略这些端…...

C语言的操作系统

C语言的操作系统 引言 操作系统是一种系统软件&#xff0c;它管理计算机硬件和软件资源&#xff0c;并为计算机程序提供公共服务。在现代计算机科学中&#xff0c;操作系统是不可或缺的组成部分&#xff0c;而C语言则是实现高效操作系统的主要编程语言之一。本文将探讨C语言在…...

洛谷题单3-P5725 【深基4.习8】求三角形-python-流程图重构

题目描述 模仿例题&#xff0c;打印出不同方向的正方形&#xff0c;然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模&#xff0c;不超过 9 9 9。 输出格式 输出矩形和正方形 输入输出样例 输入 4输出 01020304 05060708 09101112 13141516010203040506 …...

Lettuce与Springboot集成使用

一、Lettuce核心优势与Spring Boot集成背景 Lettuce特性 基于Netty的非阻塞I/O模型&#xff0c;支持同步/异步/响应式编程线程安全&#xff1a;共享单连接实现多线程并发操作&#xff0c;性能衰减低原生支持Redis集群、哨兵、主从架构&#xff0c;自动重连机制保障高可用Spring…...

C# 类库生成后自动复制到指定目录

C# 类库生成后自动复制到指定目录 在C#中,当你开发了一个类库项目(通常是.NET Core或.NET Framework项目),你可能会希望在构建(Build)完成后自动将生成的DLL文件复制到指定的目录。有几种方法可以实现这个需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…...

《系统分析师-基础篇-1-6章总结》

第1章 绪论 系统分析师角色 职责&#xff1a;需求分析、系统设计、项目管理、技术协调。 能力要求&#xff1a;技术深度&#xff08;架构设计、开发方法&#xff09; 业务理解&#xff08;企业流程、行业知识&#xff09; 沟通能力。 系统开发生命周期 传统模型&#xf…...