2012-07-03 78 views
1

使用OpenLayers,我在圖層上安裝了OpenLayers.Control.SelectFeature,並將懸停選項設置爲true。在創建層我叫OpenLayers SelectFeature控制與懸停延遲?

<layer>.events.register("featureselected",...) 

<layer>.events.register("featureunselected",...) 

來註冊創建函數和銷燬彈出。這一切工作正常。現在,我想在彈出窗口創建之前添加一個小延遲,以避免當鼠標移動多個功能時出現的彈出閃爍現象。但是,我似乎無法弄清楚如何做到這一點。我找到了OpenLayers.Handler.Hover處理程序,它有一個延遲選項,但我不知道如何將它與SelectFeature控件相結合(如果我可以的話)。

+0

我希望有人知道這個,我覺得閃爍非常討厭。如果我發現爲什麼我會在這裏發佈。 –

回答

1

我認爲this post有一些有價值的信息,我將要驗證。有些人回答說,有人談到閃爍。

編輯:在你正在自己的標籤時,我發現效果不太當你提高labelOutlineWidth。似乎只有標籤的字母算作'懸停'而不是整個PointRadius半徑。當標籤輪廓太大時,標籤看起來就像是碰到擋風玻璃的一隻蒼蠅(不是正方形,而是標籤輪廓,字母更具體)。

更新:顯然這就是爲什麼當你懸停一個文本標籤,檢查了這一點:pointer events properties。在你的OpenLayers.Style中設置這個屬性(pointerEvents:)並嘗試值'all'和其他值。它確實對我有所幫助。

+1

謝謝格倫! 更明確地說,閃爍問題的解決方案是向CSS添加'.olPopup {pointer-events:none;}'。 – sfletche

+0

隨時將我的答案標記爲'one';-) –

0

我將我的功能選擇與一些不同,這裏有一個快速(未經測試)的例子,它應該能夠幫助您獲得所需的功能。

var timer, 
delay = 500, //delay in ms 
hover = new OpenLayers.Control.SelectFeature(<layer> , { 

    hover: true, 

    onSelect: function (feature) { 

     // setup a timer to run select function 
     timer = window.setTimeout(function() { 

      // your select code 

     }, delay); 
    }, 

    onUnselect: function() { 

     // first cancel the pending timer (no side effects) 
     window.clearTimeout(timer); 

     // your unselect code 
    } 

}); 

<map>.addControl(hover); 

hover.activate();