[筆記] Chart.js 結合 floating/ui 打造客製化 tooltip

Chart.js 有提供內建的 tooltip 外,也可以自行打造。雖說官網上有範例程式碼可用,不過搭配 @floating/ui 套件的話,應該可降低不少判斷功夫。
這邊筆記下作法。

chart.js logo


內容

虛擬參考點

先由 getVirtualReference 函式將 Chart.js 提供的相對座標( caretX, caretY,相對於 Canvas)轉換為瀏覽器視窗( Viewport )的絕對座標,並提供一個具有 getBoundingClientRect 方法的物件給 Floating UI 使用。內部有一個寬高為 0 的「點」,給 Tooltip 能夠精準地對準滑鼠懸停的位置。

computePosition

內部用了 Floating UI 封裝好的 middleware,確保數據點與 Tooltip 之間有空隙 ( offset );如果空間不足,會自動翻轉 ( flip );如果太寬超出螢幕,那會自動 shift

此外 tooltip 樣式中的 pointerEvents: ‘none’,確保滑鼠懸停在 Tooltip 上時不會干擾到圖表的觸發事件

程式碼


參考資料

1. External HTML Tooltip

按讚加入粉絲團

延伸閱讀