Springy.js 節點建立時可附加任意資料物件,利用 nodeSelected 回呼即可實現點擊跳轉。
<!DOCTYPE html>
<html>
<head>
<script src="jquery.min.js"></script>
<script src="springy.js"></script>
<script src="springyui.js"></script>
<style> #springydemo { width: 800px; height: 600px; } </style>
</head>
<body>
<div id="springydemo"></div>
<script>
var graph = new Springy.Graph();
// 1. 建立節點時在 data 物件中加入 href 欄位
var dennis = graph.newNode({
label: 'Dennis',
href: 'https://example.com/dennis',
ondoubleclick: function() { console.log('Double click Dennis'); }
});
var michael = graph.newNode({ label: 'Michael', href: 'https://www.w3dev.cn' });
var jessica = graph.newNode({ label: 'Jessica' }); // 無 href 不跳轉
// 建立邊 (省略...)
graph.newEdge(dennis, michael, { color: '#00A0B0' });
graph.newEdge(michael, jessica, { color: '#CC333F' });
// 2. 初始化 UI 並綁定 nodeSelected 事件
jQuery(function() {
var springy = window.springy = jQuery('#springydemo').springy({
graph: graph,
// 關鍵:節點被選中/點擊時觸發
nodeSelected: function(node) {
// node.data 即為 newNode 時傳入的物件
if (node.data && node.data.href) {
// 新分頁開啟 (或用 location.href 當頁跳轉)
window.open(node.data.href, '_blank');
}
}
});
});
</script>
</body>
</html>
newNode({ label: '...', href: '...' }) 中的 href 會自動掛載到 node.data.href。springy({ ..., nodeSelected: fn }) 是官方提供的回呼介面。node.data && node.data.href 避免無連結節點報錯。window.open(url, '_blank') 新分頁;location.href = url 當頁跳轉。在 springyui.js 繪製節點時,根據 node.data.href 動態設定 Cursor:
// 修改 springyui.js 內部 NodeRenderer.prototype.draw
if (node.data.href) {
ctx.canvas.style.cursor = 'pointer'; // 懸停變小手
} else {
ctx.canvas.style.cursor = 'default';
}
下載 Springy 原始碼包,demo.html 中已包含完整 nodeSelected 使用範例,建議直接參考修改。