首頁 web前端 css教學 如何使用原生JavaScript繪製複雜的、可定制的魚骨圖?

如何使用原生JavaScript繪製複雜的、可定制的魚骨圖?

Apr 05, 2025 pm 05:42 PM
排列

如何使用原生JavaScript繪製複雜的、可定制的魚骨圖?

原生JavaScript繪製複雜魚骨圖詳解

本文介紹如何使用純JavaScript代碼繪製複雜的、可定制的魚骨圖,無需借助第三方庫如G6。我們將深入探討代碼實現,並指出代碼中尚待完善的部分。

文章基於一個用戶提供的複雜魚骨圖示例(見上圖),該圖包含多級子節點和節點文本信息,因此選擇原生SVG繪製方式,直接在HTML中創建SVG元素構建魚骨圖,以獲得更高的靈活性。

代碼首先定義一個JSON數據結構arr ,存儲魚骨圖的節點和連接關係。每個節點包含label (標籤)、 value (值)、 type (類型)、 time (時間)和child (子節點)等屬性。 核心部分是FishBone類,負責解析數據並使用SVG元素進行繪製。

FishBone類包含以下關鍵方法:

  • initKvArray() :遍歷數據,計算每個月份節點的寬度,並存儲在kvArray中。寬度根據子節點中最長文本長度自適應調整。
  • getMaxWidth() :遞歸計算每個節點及其子節點中最長文本寬度,確定節點寬度。
  • randerMonthBox() :繪製月份節點(平行四邊形)及其文本。月份節點的x坐標根據前一個節點寬度累加計算。
  • creatBigCircle() :繪製主干節點(圓圈)和連接線,並遞歸調用renderParent()繪製子節點。
  • renderParent() :遞歸繪製子節點,併計算子節點高度。
  • randerLeaf() :繪製最底層葉子節點。
  • getMaxChildHeight() :遞歸計算每個節點的最大子節點數量,確定子節點排列方式。
  • getLineWidth() :計算文本寬度,設置最小寬度,確保線條足夠長以容納文本。
  • createTag() :輔助函數,創建SVG元素。
  • createMonth() :輔助函數,創建月份節點。

代碼已實現大部分功能,包括月份節點寬度自適應、文本長度自適應以及基本圖形繪製。但仍有以下待完善部分:

  • 子集展開/收縮功能:允許用戶展開或收縮子節點,提高交互性。
  • 線條顏色配置:允許用戶自定義線條顏色,增強視覺效果。
  • 整體收縮/展開功能:允許用戶一次性展開或收縮整個魚骨圖。
  • 圖自適應大小功能:根據內容自動調整魚骨圖大小,適應不同屏幕尺寸。
  • 節點事件綁定:允許用戶與節點交互,例如點擊節點顯示更多信息。

這些功能需要根據實際需求補充完善。代碼已預留相關接口和變量,方便擴展。例如,可在arr數據中添加事件屬性,並在創建元素時綁定事件監聽器實現節點事件。

此代碼提供了一個功能完善的魚骨圖基礎,用戶可根據自身需求進行定制和擴展,原生SVG的特性保證了靈活性與可控性。

以上是如何使用原生JavaScript繪製複雜的、可定制的魚骨圖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1662
14
CakePHP 教程
1419
52
Laravel 教程
1311
25
PHP教程
1262
29
C# 教程
1234
24
Bootstrap圖片居中需要用到flexbox嗎 Bootstrap圖片居中需要用到flexbox嗎 Apr 07, 2025 am 09:06 AM

Bootstrap 圖片居中方法多樣,不一定要用 Flexbox。如果僅需水平居中,text-center 類即可;若需垂直或多元素居中,Flexbox 或 Grid 更合適。 Flexbox 兼容性較差且可能增加複雜度,Grid 則更強大且學習成本較高。選擇方法時應權衡利弊,並根據需求和偏好選擇最適合的方法。

十大加密貨幣交易平台 幣圈交易平台app排行前十名推薦 十大加密貨幣交易平台 幣圈交易平台app排行前十名推薦 Mar 17, 2025 pm 06:03 PM

十大加密貨幣交易平台包括:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

十大虛擬幣交易平台2025 加密貨幣交易app排名前十 十大虛擬幣交易平台2025 加密貨幣交易app排名前十 Mar 17, 2025 pm 05:54 PM

十大虛擬幣交易平台2025:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

網頁批註如何實現Y軸位置的自適應佈局? 網頁批註如何實現Y軸位置的自適應佈局? Apr 04, 2025 pm 11:30 PM

網頁批註功能的Y軸位置自適應算法本文將探討如何實現類似Word文檔的批註功能,特別是如何處理批註之間的間�...

c上標3下標5怎麼算 c上標3下標5算法教程 c上標3下標5怎麼算 c上標3下標5算法教程 Apr 03, 2025 pm 10:33 PM

C35 的計算本質上是組合數學,代表從 5 個元素中選擇 3 個的組合數,其計算公式為 C53 = 5! / (3! * 2!),可通過循環避免直接計算階乘以提高效率和避免溢出。另外,理解組合的本質和掌握高效的計算方法對於解決概率統計、密碼學、算法設計等領域的許多問題至關重要。

安全的虛擬幣軟件app推薦 十大數字貨幣交易app排行榜2025 安全的虛擬幣軟件app推薦 十大數字貨幣交易app排行榜2025 Mar 17, 2025 pm 05:48 PM

安全的虛擬幣軟件app推薦:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

安全靠譜的數字貨幣平台有哪些 安全靠譜的數字貨幣平台有哪些 Mar 17, 2025 pm 05:42 PM

安全靠譜的數字貨幣平台:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

wordpress文章列表怎麼調 wordpress文章列表怎麼調 Apr 20, 2025 am 10:48 AM

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

See all articles