2013-02-22 133 views
3

我這裏有一個數據可視化(第二個):d3.js - 使鼠標鬆開/鼠標按下,但防止點擊行爲

http://mikeheavers.com/main/work

如果你點擊代表技能領域的圈子裏,它揭示了內綠具有特定技能的圈子。如果你按住代表技能的綠色圓圈,它們就會動畫,成長,然後縮回鼠標釋放。但是,如果您只需點擊圈子,它們就會增長,但不會恢復到之前的大小(我猜,這個mousedown沒有註冊) - 這會導致一個圈子在每次點擊時會不斷變大。

有沒有辦法通過d3或javascript/jquery防止點擊行爲?我只想要mouseup和mousedown。

+0

看起來你只是重新應用D3的例子我見過。你最初的榜樣在哪? – Marc 2013-02-22 15:15:54

+0

好吧,沒有一個例子利用點擊/鼠標放下行爲的圓圈包裝 - 我自己添加了所有,但原始的非交互式圓圈包裝示例如下:http://bl.ocks.org/mbostock/4063530 – mheavers 2013-02-22 15:21:02

+0

得到它了。我正在考慮這個,我認爲它做了類似於你正在尋找的東西:http://www.nytimes.com/interactive/2012/09/04/us/politics/democratic-convention-words.html。我可能不會有用解決這個問題,但祝你好運。 – Marc 2013-02-22 16:11:22

回答

2

我正在觀察與您所描述的行爲不同的行爲。

  • 如果您單擊一個圓圈,無論點擊的時間長短(無論是否保留),它都會返回到其原始大小。
  • 如果您反覆快速地點擊一個圓圈,這是當它開始增長並且不會恢復到原始大小時。
  • 如果你按住一個圓,然後將鼠標移動到它的外面,它們都會保持粉紅色,並且不會恢復到原來的大小。

我想安裝一個簡單的.on('mouseout', handler)到球恢復到原來的大小將解決最後的問題,這是非常明顯的,任何錯過mouseup事件,由於外遷。您也可以附加mouseup到整個文件(d3.select('body').on('mouseup', handler)),這將捕獲任何此類事件;那麼你只需要記錄被點擊的最後一個球體。

此外,要解決您的原始問題,您可以確保mouseup事件是通過在mousedown事件中添加e.preventDefault()觸發的。這將防止快速點擊變成瀏覽器的雙擊或其他事件。

討論這些問題的其他職位: