2015-06-20 51 views
0

我正在向SVG元素註冊以下D3事件。D3 mousout事件先於點擊

要解釋這是關於什麼的,請考慮當我將鼠標懸停在特定區域上時,可以看到伴隨鼠標在該區域移動的圓形元素。

當我移動該地區的圓被隱藏,當我把鼠標懸停回來它應該再次可見。 目標是點擊該圓圈執行功能。這是事情不起作用的地方。

mouseout事件總是被炒魷魚提前點擊的,而且由於對象被通過鼠標移開隱藏的,它偏出觸發click事件

d3.select(my_object.my_circle) 
     .data([{ "my_object": this }]) 
     .call(FUNC_DRAG) 
     .on("mouseover", FUNC_OVER) 
     .on("mousemove", FUNC_MOVE) 
     .on("mouseout" , FUNC_OUT) 
     .on("click" , FUNC_CLICK); 

以下是處理功能。

當我點擊上my_circle,在鼠標移開事件被觸發FUNC_OUT將隱藏我點擊的元素,取消點擊事件會觸發FUNC_CLICK

function FUNC_OVER(d) { 
d3.select(my_object.my_circle).style("visibility", "visible"); 
} 

function FUNC_OUT(d) { 
console.log("mouseout"); 
d3.select(my_object.my_circle).style("visibility", "hidden"); 
} 

function FUNC_CLICK(d) { 
// this never executes; 
console.log("click"); 
} 

理想情況下,我需要了解如何在mouseout之前執行點擊事件。

+2

你的CSS是什麼樣的?你有'指針事件:所有''在'circl e'?對我來說,它可以正常工作,如果你這樣做... –

+0

我沒有使用指針事件。感謝您的建議。它確實有效,但不幸的是該元素在隱藏時是可點擊的,並且在這種情況下我無法知道它何時不應該被點擊(它可能被隱藏,因爲我移出了該區域,但會導致它仍然是可點擊的。但似乎我可以使用這種方法很好的提示 – gextra

+0

對我而言,似乎最適合我的工作是避免使用鼠標事件隱藏對象,而是使用setTimeout(F,1000,circleObjectAndElse),它允許點擊事件在被隱藏之前觸發 – gextra

回答

0

考慮兩個元件:

  • 一個:一個下方層元件
  • B:該懸停在元素「A」和應該是可見的,並按照鼠標位置,只要是「光標元件」鼠標也位於元素「A」之上。

一般而言,每次元件「B」變得可見(只要鼠標懸停元件「A」,這將觸發「A」 mouseOut事件和切割的「A」來跟蹤運動的能力。

要解決以上,將光標定元素「B」具有以下樣式:「指針的事件:visibleStroke」。該選項確保了「B」不會調用它自己的事件,除非其行程/邊界到達,這是從來沒有的,因爲「A」控制着「B」始終在鼠標位置。