我不明白在D3的Mike Bostock例子中的D3 DragEvent對象的行爲。D3拖動事件行爲:DragEvent.x和DragEvent.y值來源
這些是兩個例子我不理解: Circle Dragging I Drag + Zoom
這是我不理解的代碼:
功能拖動(d){d3.select(這個).attr(「cx」,dx = d3.event.x).attr(「cy」,dy = d3.event.y); }
在此示例中,d.x和d.y是包含圓的最後一箇中心的數據對象的一部分。
我希望這個代碼的情況發生,是屬性Cx和Cy圈變化d3.event.x和d3.event.y
的當前值在我看來,那應該是用戶開始拖動時鼠標的座標。如果用戶沒有開始精確地在圓的中心拖動,我期望的行爲是圓到用戶開始拖動的位置,然後是正常的拖動行爲。
我的問題是,最初的跳躍不會發生,我不知道爲什麼。
當代碼運行時,我檢查了d3.event.x和d3.event.y的值,它們與d.x和d.y完全相同,不必介意用戶在圓圈中單擊的位置。我不明白爲什麼會這樣。
最後,我改變了對象的名稱(並且只需要在代碼中需要),從d.x和d.y到d.m和d.n,代碼開始執行我期望的操作。
功能拖動(d){d3.select(本).attr( 「CX」,D.M = d3.event.x).attr( 「CY」,d.n = d3.event.y); }
因此,當數據對象具有屬性d.x和d.y以便數據對象具有屬性d.m和d.n. 似乎DragEvent對象正在期待一個具有特定屬性的數據對象,但這聽起來很奇怪,我也找不到它。
我期待避免檢查D3源代碼,如果有人知道答案已經。
邁克Bostocks的例子是使用D3版本3。目前有一個版本4,可能會導致您遇到的差異,如果您在v4中進行測試。 –
在我的問題中鏈接的示例使用src =「// d3js.org/d3.v4.min.js」,所以我不認爲這是問題所在。我已檢查過它,並確認它不是版本問題。無論如何,我沒有遇到與這個例子不同的地方。這只是我不明白它爲什麼會起作用,以及爲什麼如果您更改數據對象的屬性名稱時不起作用。 – Robert