2015-08-25 172 views
4

我正在創建一個支持區域刷牙(參見灰色框)以及單個點交互(通過懸停在某些點上)的籃球杆圖表可視化。我正在使用d3.js來實現這一點。但是,畫布畫布元素位於六角形元素的上方,因此我無法與後面的元素進行交互,儘管它們是可見的。將鼠標懸停在另一個元素下的元素

我想知道是否有可能在六邊形上有一個鼠標懸停事件,儘管它們在後臺。請記住,所有點擊和拖動事件都適用於頂層畫布元素。

謝謝你的幫助。

編輯:澄清,使頂層不可見點擊不會工作,因爲我仍然需要單擊並拖動事件註冊畫筆畫布上。我只需要鼠標懸停在下面的六邊形選項。 Shot chart

+1

我們是在談論2個不同的DOM元素疊加在畫布元素中還是層? – MinusFour

+0

他們是兩個不同的DOM元素重疊,我很確定。任何和所有的幫助將不勝感激。 – cherrypickerio

+1

爲什麼不把畫筆畫布元素放在節點下面? –

回答

2

如果我們談論2個疊加的DOM元素是的,這是可能的。無法真正瞭解HTML的結構,因爲它不在那裏,但請記住,即使元素沒有被隱藏起來,事件也會通過其父母冒泡。

$('#container').on('mouseover', function(){ 
 
    $('#results1').html('Inside green square'); 
 
    $('#results3').html('Last caller: green'); 
 
    }); 
 

 
$('#child').on('mouseover', function(){ 
 
    $('#results2').html('Inside blue square'); 
 
    $('#results3').html('Last caller: blue'); 
 
    }); 
 

 
$('#container').on('mouseleave', function(){ 
 
    $('#results3').html('Last caller: green'); 
 
    $('#results1').html(''); 
 
    }); 
 

 
$('#child').on('mouseleave', function(){ 
 
    $('#results3').html('Last caller: blue'); 
 
    $('#results2').html(''); 
 
    });
#container { 
 
    height: 100px; 
 
    width: 100px; 
 
    background-color: green; 
 
} 
 

 
#child { 
 
    height: 50px; 
 
    width: 50px; 
 
    background-color: blue; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div id="child"> 
 
    </div> 
 
    </div> 
 
<pre id="results1"></pre> 
 
<pre id="results2"></pre> 
 
<pre id="results3"></pre>

但是,你不能做到這一點(只有HTML和CSS改變):

$('#container').on('mouseover', function(){ 
 
    $('#results1').html('Inside green square'); 
 
    $('#results3').html('Last caller: green'); 
 
    }); 
 

 
$('#child').on('mouseover', function(){ 
 
    $('#results2').html('Inside blue square'); 
 
    $('#results3').html('Last caller: blue'); 
 
    }); 
 

 
$('#container').on('mouseleave', function(){ 
 
    $('#results3').html('Last caller: green'); 
 
    $('#results1').html(''); 
 
    }); 
 

 
$('#child').on('mouseleave', function(){ 
 
    $('#results3').html('Last caller: blue'); 
 
    $('#results2').html(''); 
 
    });
#container { 
 
    height: 100px; 
 
    width: 100px; 
 
    background-color: green; 
 
} 
 

 
#child { 
 
    position: absolute; 
 
    top: 10px; 
 
    height: 50px; 
 
    width: 50px; 
 
    background-color: blue; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"></div> 
 
<div id="child"></div> 
 
<pre id="results1"></pre> 
 
<pre id="results2"></pre> 
 
<pre id="results3"></pre>

我能想到爲唯一的事情就是成立觸發元素父級上的偵聽器,用於檢查鼠標位置並將其與元素位置進行比較。

+0

我可能將不得不實施你看來最後的建議。我可以在追蹤鼠標移動的頂層畫布上設置偵聽器和觸發器。每個單獨的六邊形都有一個監聽器,如(「customerMouseover」,function(d){if(d3.mouse within range){change fill}})上的 。 我不完全確定如何創建一個自定義事件,但我相信這不是太困難。但我有另外一個問題,就是如何將位置與每個六邊形進行比較,因爲如果我將它與位置進行比較,那麼它將是一個圍繞該點的圓形半徑。 – cherrypickerio

相關問題