2016-07-25 2 views
3

마우스 오버가 일부 기능 안에있을 때 상호 작용을 활성화하려고합니다.Openlayers 3 - 상호 작용 및 포인터 이동

너무 일하고 있습니다 ... 마우스를 천천히 움직이면 상호 작용이 계속 유지됩니다.

OL3의 버그입니까, 아니면 다른 방식으로해야합니까?

코드 : 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);}); – ahocevar

답변

2

확인하시기 바랍니다. 그리기 레이어가 아니라 벡터 레이어의 피쳐를 히트 감지해야합니다.

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

마지막 인수는 벡터 레이어 기능을 히트 감지하는 계층 필터를 추가로 forEachFeatureAtPixel 기능을 변경합니다. JSFiddle 작업 업데이트

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

+0

감사합니다 안드레아스! 그것은 완벽하게 작동합니다! –

0
내가 @jonatas에 동의

, 버그 것 같다.

하지만 직장을 수행하는 것으로 보이는 해결 방법이 있습니다.

  1. 다중 행을 피하십시오. 마우스가 기능 위에있을 때 ol3가 확인하는 것이 더 복잡해집니다.
  2. vectorSource.forEachFeatureInExtent(을 사용하고 마우스 좌표를 사용하여 작은 사각형을 만들고 모든 방향으로 몇 미터를 더하십시오. 이렇게하면 마우스 "mbr"이 기능 내에 있는지 확인할 수 있습니다. 마우스 좌표에서 + 5 미터를 사용하여 mbr을 빌드 한 것을 볼 수 있습니다. 당신은 당신의 requirment를 만족시키기 위해 조정해야합니다.

이되지 OpenLayers에서, 응용 프로그램의 버그입니다 fiddle here

+0

Nice! !! !! 나는이 방법을 시도 할 것이다. 감사합니다 –