4
當用戶將鼠標光標放置在多邊形的輪廓上/附近時,應出現錨點並沿着鼠標的位置,但捕捉到多邊形的輪廓。防止圓在KineticJS中閃爍
問題:當處理函數mousemove
更新此錨點的位置時,錨點似乎閃爍。什麼導致閃爍和更新緩慢? KineticJS示例here似乎更新得非常快。
此外,錨點不會捕捉到多邊形的輪廓/筆觸。這個效果如何實現?
當用戶將鼠標光標放置在多邊形的輪廓上/附近時,應出現錨點並沿着鼠標的位置,但捕捉到多邊形的輪廓。防止圓在KineticJS中閃爍
問題:當處理函數mousemove
更新此錨點的位置時,錨點似乎閃爍。什麼導致閃爍和更新緩慢? KineticJS示例here似乎更新得非常快。
此外,錨點不會捕捉到多邊形的輪廓/筆觸。這個效果如何實現?
你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);
});
這樣做很有道理!有沒有辦法阻止錨點觸發'mouseleave'事件?我試過'mouseout'並得到同樣的問題。 – Nyxynyx
謝謝傑森。我試了一下,閃爍停止了,但當我沿着廣場邊緣移動鼠標時,錨點並沒有跟隨鼠標位置。當鼠標離開錨點時,錨點只會更新它的位置,希望錨點可以平滑地跟蹤鼠標位置,但是會限制在方形邊緣。 jsfiddle.net/yZFFJ/8 – Nyxynyx
聽起來就像你需要將'mousemove'事件放在畫布本身上,並在那裏執行所有需要的計算(輸入邊界,離開邊界,是否顯示錨點以及在什麼位置)。 –