2011-12-03 66 views
0

我有一個Protovis圖表,響應平移/縮放事件,如website上的示例,該示例覆蓋了Panel,該示例使圖形保留爲空。不幸的是,它捕獲了所有Events,如mouseovermouseout,這是我的基礎圖通常會響應的。通過Protovis Panels傳遞事件

這是因爲您必須將Panel設置爲接受所有事件。根據這種情況的docs的唯一有效PARAMS是 '所有', '畫' 和 '無'

vis.add(pv.Panel) .events( 「全」)

如何防止縮放Panel捕獲這些事件?或者我怎樣才能將它們傳遞給它下面的Panel

回答

0

我不認爲這是你想要的答案,但據我所知,沒有簡單的方法可以將事件傳遞給更低的元素。但是,如果你的圖形類似的例子,你可以簡單地改變無形Panel的順序和標記應接收事件,從:

vis.add(pv.Dot) 
    .event('click', function() { alert("clicked") }) 
    // ... etc 

vis.add(pv.Panel) 
    .events("all") 
    // ... etc 

到:

vis.add(pv.Panel) 
    .events("all") 
    // ... etc 

vis.add(pv.Dot) 
    .event('click', function() { alert("clicked") }) 
    // ... etc 

這將改變標記的z順序,以便點在面板之前接收點擊事件。它不需要即插即用,因爲您必須將面板插入現有圖形中的正確位置,但它應該可以工作。

您可以根據這裏的例子中看到的jsfiddle:http://jsfiddle.net/nrabinowitz/Ctxrr/

編輯:每下面的評論,這種方法可以爲縮放事件的一個問題。如this updated fiddle所示,更好的方法是使不可見的Panel成爲所討論標記的父親 - 事件將自動從子級向上級冒泡,如果子級未爲事件設置偵聽器,則不會干擾父母。所以只要需要接收事件的所有前景標記都是平移/縮放面板的子項,就應該可以工作。

+0

不幸的是,當你像這樣重新排列面板時,這些標記會干擾平移/縮放事件。當光標超過標記時,用戶可以平移/縮放。這在縮小時會成爲一個真正的問題,標記會在光標下滑動,並一直跳到頁面上。 – smith324

+0

呃,好點。 – nrabinowitz

+0

@ smith324 - 請參閱我上面的更新。如果這種方法是可行的,那比我的第一個建議好。 – nrabinowitz