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 圖形庫中,方便在可視化圖表中使用。

這種方法不僅使節點外觀得以靈活定制,還能實時響應狀態變化,提升交互性和用戶體驗。希望本教程能幫助你快速上手,實現個性化的圖表展示!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76724.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端開發工廠模式的優缺點是什么?

一、什么是工廠模式&#xff1f; 工廠模式屬于創建型設計模式&#xff0c;核心思想是將對象的實例化過程封裝到特定方法或類中&#xff0c;讓客戶端不需要直接通過new關鍵字創建對象。 舉個例子&#xff1a;就像奶茶店不需要顧客自己調配飲品&#xff0c;而是通過"點單-…

Element-plus彈出框popover,使用自定義的圖標選擇組件

自定義的圖標選擇組件是若依的項目的 1. 若依的圖標選擇組件 js文件&#xff0c;引入所有的svg圖片 let icons [] // 注意這里的路徑&#xff0c;一定要是自己svg圖片的路徑 const modules import.meta.glob(./../../assets/icons/svg/*.svg); for (const path in modules)…

openmv用了4個了,燒了2個,質量堪憂啊

都是原裝貨&#xff0c;主板出現過存儲不完全、圖像存不上、主板代碼保存亂碼、意外出現亂碼的現象。 希望要用的童鞋謹慎使用。

基于DrissionPage的Taptap熱門游戲數據爬蟲實戰:從Requests到現代爬蟲框架的遷移指南(含完整代碼復制)

目錄 ?編輯 一、項目重構背景與技術選型 1.1 原代碼問題分析 1.2 DrissionPage框架優勢 二、環境配置與基礎改造 2.1 依賴庫安裝 2.2 基礎類改造 三、核心功能模塊重構 3.1 請求參數自動化生成 3.2 智能頁面渲染 3.3 數據解析優化 四、數據庫操作增強 4.1 批量插入…

解析K8S四層網絡設計

模仿七層網絡模型&#xff0c;抽象出四層模型 POD網絡 同一節點上的pod網絡 依賴于虛擬網橋/網卡&#xff08;linux虛擬設備&#xff09;pod內容器共享網絡棧&#xff08;pause容器創建&#xff09; 不同節點上的pod網絡 路由方案&#xff1a;依賴于底層網絡設備&#x…

FPGA實現數碼管顯示分秒時間

目錄 一. verilog實現 二. 燒錄驗證 三. 結果驗證 使用開發板&#xff1a;DE2-115開發板 一. verilog實現 要實現分和秒&#xff0c;需要知道定時器的頻率&#xff0c;通過查手冊可知&#xff0c;我使用的開發板時鐘為50hz&#xff0c;也就是時鐘一個周期是2微秒。 5000000…

Spring 核心技術解析【純干貨版】- XVI:Spring 網絡模塊 Spring-WebMvc 模塊精講

在現代 Web 開發中&#xff0c;高效、穩定、可擴展的框架至關重要。Spring WebMvc 作為 Spring Framework 的核心模塊之一&#xff0c;為開發人員提供了強大的 MVC 體系支持&#xff0c;使得 Web 應用的構建更加便捷和規范。無論是傳統的 JSP 視圖渲染&#xff0c;還是基于 RES…

MySQL系統庫匯總

目錄 簡介 performance_schema 作用 分類 簡單配置與使用 查看最近執行失敗的SQL語句 查看最近的事務執行信息 sys系統庫 作用 使用 查看慢SQL語句慢在哪 information_schema 作用 分類 應用 查看索引列的信息 mysql系統庫 權限系統表 統計信息表 日志記錄…

標題:利用 Rork 打造定制旅游計劃應用程序:一步到位的指南

引言&#xff1a; 在數字化時代&#xff0c;旅游計劃應用程序已經成為旅行者不可或缺的工具。但開發一個定制的旅游應用可能需要耗費大量時間與精力。好消息是&#xff0c;Rork 提供了一種快捷且智能的解決方案&#xff0c;讓你能輕松實現創意。以下是使用 Rork 創建一個定制旅…

GATT(Generic Attribute Profile)是藍牙低功耗(Bluetooth Low Energy,簡稱BLE)協議棧中的一個核心協議

藍牙的 GATT&#xff08;Generic Attribute Profile&#xff09; 是藍牙低功耗&#xff08;Bluetooth Low Energy&#xff0c;簡稱BLE&#xff09;協議棧中的一個核心協議&#xff0c;用于定義設備如何通過藍牙進行數據傳輸和交互。GATT 是基于 ATT&#xff08;Attribute Proto…

[ deepseek 指令篇章 ]300個領域和賽道喂飯級deepseek指令

&#x1f36c; 博主介紹 &#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【數據通信】 【通訊安全】 【web安全】【面試分析】 &#x1f389;點贊?評論?收藏 養成習…

數據結構 -- 圖的存儲

圖的存儲 鄰接矩陣法 鄰接矩陣存儲不帶權圖 0 - 表示兩個頂點不鄰接 1 - 表示兩個頂點鄰接 在無向圖中&#xff0c;每條邊在矩陣中對應兩個1 在有向圖中&#xff0c;每條邊在矩陣中對應一個1 //不帶權圖的鄰接矩陣存儲 #define MaxVertexNum 100 //頂點數目的最大值 typed…

25.4.4錯題分析

計算機組成原理 總線特點 考察總線特點&#xff0c;串行總線&#xff0c;一次只傳1bit&#xff0c;采用單條電纜&#xff0c;抗干擾能力強&#xff0c;傳輸距離較遠&#xff0c;成本低&#xff0c;但傳輸速度慢&#xff0c;延遲較高&#xff0c;不適用大規模數據傳輸 并行總線…

規則引擎Drools

1.規則引擎概述 1.1 什么是規則引擎 規則引擎 全稱為業務規則管理系統&#xff0c;英文名為BRMS&#xff0c;規則引擎的主要思想是將應用程序中的業務決策部分分離出來&#xff0c;并使用預定義的語義模塊編寫業務規則&#xff0c;由用戶或開發者在需要時進行配置和管理。 需…

框架PasteForm實際開發案例,換個口味顯示數據,支持echarts,只需要標記幾個特性即可在管理端顯示(2)

PasteForm框架的主要思想就是對Dto進行標記特性,然后管理端的頁面就會以不一樣的UI呈現 使用PasteForm框架開發,讓你免去開發管理端的煩惱,你只需要專注于業務端和用戶端! 在管理端中,如果說表格是基本的顯示方式,那么圖表chart就是一個錦上添花的體現! 如果一個項目擁…

【工具】在 Visual Studio 中使用 Dotfuscator 對“C# 類庫(DLL)或應用程序(EXE)”進行混淆

在 Visual Studio 中使用 Dotfuscator 進行混淆 Dotfuscator 是 Visual Studio 自帶的混淆工具&#xff08;Dotfuscator Community Edition&#xff0c;簡稱 CE&#xff09;。它可以混淆 C# 類庫&#xff08;DLL&#xff09;或應用程序&#xff08;EXE&#xff09;&#xff0c…

線程同步與互斥(上)

上一篇&#xff1a;線程概念與控制https://blog.csdn.net/Small_entreprene/article/details/146704881?sharetypeblogdetail&sharerId146704881&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link我們學習了線程的控制及其相關概念之后&#…

[Linux系統編程]進程信號

進程信號 1. 信號入門1.1 信號基本概念1.2 技術應用角度的信號2. 信號的產生2.1 通過終端按鍵(如鍵盤)產生信號2.2 通過異常產生信號2.3 調用系統函數向進程發信號2.4 由軟件條件產生信號2.5 總結3. 阻塞信號3.1 信號其他相關常見概念3.2 內核中的信號表示3.3 sigset_t3.3.1 …

要素的選擇與轉出

1.要素選擇的三種方式 當要在已有的數據中選擇部分要素時&#xff0c;ArcMap提供了三種方式:按屬性選擇、位置選擇及按圖形選擇。 1)按屬性選擇 通過設置 SQL查詢表達式&#xff0c;用來選擇與選擇條件匹配的要素。 (1)單擊主菜單下【選擇】【按屬性選擇】&#xff0c;打開【按…

Springboot + Vue + WebSocket + Notification實現消息推送功能

實現功能 基于Springboot與Vue架構&#xff0c;首先使用Websocket實現頻道訂閱&#xff0c;在實現點對點與群發功能后&#xff0c;在前端調用windows自帶的消息通知&#xff0c;實現推送功能。 開發環境 Springboot 2.6.7vue 2.6.11socket-client 1.0.0 準備工作 在 Vue.js…