【 D3.js 進階系列 — 2.1 】 力學圖的事件 + 頂點的固定
本章討論在力學圖中常用到的事件( Event ),然後對【進階 – 第 2.0 章】的人物關係圖進行改進,使用戶能夠固定拖拽的對象。
在【入門 – 第 9.2 章】和【進階 – 第 2.0 章】中,都用到了以下代碼:
這裏的 force 是之前代碼中定義的佈局( Layout ),tick 表示當運動進行中每更新一幀時。這是力學圖中最常使用的事件,用於設定力學圖每一幀是如何更新的。除此之外,還有一些其他常用的事件。
1. 佈局的事件
代碼中,假設定義如下的佈局:
力學圖佈局 force 本身的事件,D3 提供了3個,分別爲 start ,end,tick。在寫代碼時,可形如:
各事件發生時,就會執行相應的代碼。
2. 拖拽的事件
在【入門 – 第 9.2 章】和【進階 – 第 2.0 章】中,都出現了以下代碼:
即設定當拖拽時調用函數 force.drag()。D3 中提供了3種拖拽事件:dragstart、dragend、drag。
上面代碼中,分別定義了三種事件後,將此拖拽函數賦值給變量 drag,在調用時,只要使用:
即可。
3. 頂點的固定
使用佈局轉換數據之後,頂點有一個屬性 fixed 。當這個值爲 true 時,頂點就是固定不動的;爲 false 時,它就是運動的。默認是 false 的。
如果要改進【進階 – 第 2.0 章】的代碼,使得用戶能夠任意固定和解鎖頂點,可添加代碼如下:
當拖拽開始時,被拖拽頂點設定爲固定的:
當鼠標雙擊頂點時,對頂點解鎖:
4. 結果
在左上角添加了標籤文字,請好好體會一下各事件發生的狀況。
拖拽後頂點會固定,雙擊頂點能夠解鎖。
完整代碼請點擊下面鏈接,右鍵選擇“查看網頁源代碼”:
http://www.ourd3js.com/demo/J-2.1/relationforce.html
源代碼和圖片打包下載:j21.zip
謝謝閱讀。
http://www.ourd3js.com/wordpress/606/#more-606