2014-02-10 24 views
-1

問題是:如何檢查d3行爲(如拖動或縮放)是否已在元素上調用?似乎是這個任務是關於獲取事件,這是附加到元素?什麼是常用方法?檢查行爲是否附加到元素

謝謝。

+0

我不認爲D3允許你輕鬆地檢查,但它通常不會傷害兩次附加行爲 - 事件處理程序將被簡單地覆蓋。 –

+0

嗨,拉爾斯)我在一張圖表中結合了筆刷和縮放行爲的複雜邏輯,因此記住/分配給所有比例/範圍的變量很痛苦等等,檢查一個元素是否已經具有更容易和更清晰行爲在我的情況。 – Cassius

+0

您可以在設置完所有內容後分配行爲嗎? –

回答

0

我知道這是舊的,但我遇到這個帖子尋找同樣的事情,看到沒有答案,所以創造了我自己的答案。這是d3.js版4.

function hasD3EventOn(ele, eventName, eventType) { 
    if (!ele || typeof eventName == 'undefined') return !1; 
    if (ele._groups) ele = ele._groups[0][0]; // if d3.select() 
    var on = ele.__on; //d3.js(v4) function onRemove(typename) 
    if (!on || !on.length) return !1; var i = on.length, o; 
    while (--i >= 0) { if ((o = on[i]).name && o.name === eventName && (typeof eventType == 'undefined' || (o.type && o.type === eventType))) return !0; } return !1; 
} 

只要在任何一個d3.select元件發送(第一隻陣列)或天然DOM元素與該事件名稱一起如「縮放」,兩者都reqired 。也可以選擇「wheel」等事件類型。它還有一些基本驗證(可能過多),以防止在使用垃圾或屬性名稱collison進行調用時發生崩潰。