2016-07-25 28 views
3

マウスオーバーが一部の機能の内側にあるときにインタラクションをアクティブにしようとしています。Openlayers 3 - インタラクションとポインタ移動

これはうまくいきます...問題は、マウスをゆっくり動かすとインタラクションがアクティブになることです。

OL3のバグですか、別の方法で行うべきですか?

コード:私は@jonatasに同意http://jsfiddle.net/gmaq54dm/3/

olMap.on("pointermove", function (e) { 
    if (e.dragging) { 
     return; 
    } 
    var map = e.map; 
    console.log(e.pixel); 
    var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { 
     return feature; 
    }); 
    var hit = (feature) ? true : false; 
    console.log(hit); 
    olDraw.setActive(hit); 
}); 

おかげ

+0

これはバグのようです。コア開発者にそれについて報告することができます。 –

+0

私は最後の行を 'setTimeout'呼び出しでラップして、pointermoveイベントが処理された後に呼び出されるようにします:' window.setTimeout(function(){olDraw.setActive(hit);}、0); ' – ahocevar

答えて

2

チェック。描画レイヤーではなく、ベクターレイヤーのヒット検出機能のみを確認する必要があります。あなたのforEachFeatureAtPixel機能が

var feature = map.forEachFeatureAtPixel(e.pixel, function(feature, layer) { 
    return feature; 
}, null, function(layer) { 
    return layer == vectorLayer 
}); 

に変更し、最後の引数はベクトル層の上にのみヒット検出機能にレイヤフィルタを追加します。

JSFiddle:http://jsfiddle.net/gmaq54dm/4/

+0

ありがとうアンドレアス!それは完璧に動作します! –

0

、バグのようです。

あなたの仕事をするように思われる回避策があります。

  1. 複数行の文字列を避けてください。マウスが機能上にあるときにol3が確認することがより複雑になります。
  2. vectorSource.forEachFeatureInExtent(を使用し、マウス座標を使用して小さな矩形を作成し、すべての方向に数メートルを追加します。これはあなたのマウス "mbr"が機能内に収まっていることを確認します。 マウス座標から+ 5メートルを使用してmbrを構築しています。あなたはあなたの要件を満たすために調整する必要があります。

これはないOpenLayersをして、アプリケーションのバグですfiddle here

+0

Nice! !!私はこの方法で試してみるつもりです。おかげで –

関連する問題