2012-12-23 121 views
4

當用戶將鼠標光標放置在多邊形的輪廓上/附近時,應出現錨點並沿着鼠標的位置,但捕捉到多邊形的輪廓。防止圓在KineticJS中閃爍

問題:當處理函數mousemove更新此錨點的位置時,錨點似乎閃爍。什麼導致閃爍和更新緩慢? KineticJS示例here似乎更新得非常快。

此外,錨點不會捕捉到多邊形的輪廓/筆觸。這個效果如何實現?

JSfiddle

回答

0

mousemove功能移動錨。一旦錨點移動,您的鼠標不再位於polyHitArea,因此您的mouseleave事件正在觸發並隱藏錨點。

編輯

,我能想到的手,以防止這種情況發生,最好的辦法是到setVisible(false)的代碼放到一個setTimeout呼叫 - 和對mouseoverAnchor呼叫clearTimeout一個mouseenter事件。

var polyHitArea._timeout = 0; 

polyHitArea.on('mouseover', function(e) { 
    clearTiemout(polyHitArea._timeout); 
    mouseoverAnchor.setVisible(true); 
    stage.draw(); 
}); 

polyHitArea.on('mouseleave', function(e) { 
    clearTimeout(polyHitArea._timeout); 
    polyHitArea._timeout = setTimeout(function(){ 
     mouseoverAnchor.setVisible(false); 
    }, 25); // 25 ms enough time? 
    stage.draw(); 
}); 

mouseoverAnchor.on('mouseenter', function(e) { 
    clearTimeout(polyHitArea._timeout); 
}); 
+0

這樣做很有道理!有沒有辦法阻止錨點觸發'mouseleave'事件?我試過'mouseout'並得到同樣的問題。 – Nyxynyx

+0

謝謝傑森。我試了一下,閃爍停止了,但當我沿着廣場邊緣移動鼠標時,錨點並沒有跟隨鼠標位置。當鼠標離開錨點時,錨點只會更新它的位置,希望錨點可以平滑地跟蹤鼠標位置,但是會限制在方形邊緣。 jsfiddle.net/yZFFJ/8 – Nyxynyx

+0

聽起來就像你需要將'mousemove'事件放在畫布本身上,並在那裏執行所有需要的計算(輸入邊界,離開邊界,是否顯示錨點以及在什麼位置)。 –