2011-08-05 6 views
6

마커를지도의 기능으로 표시하기위한 벡터 레이어가 있습니다.하지만 이제는 마더처럼, 드래그하거나 클릭 할 수 있습니다. 둘 다 얻으려면 어떻게해야합니까?마커를 드래그 가능하게 만들고 클릭 할 수있게 만들기

/*** Init Drag Marker 
*/ 
    var dragFeature = new OpenLayers.Control.DragFeature(layerTrackMarker, 
     {'onComplete': updateMarker} 
    ); 
    map.addControl(dragFeature); 
    dragFeature.activate(); 

/*** Init Click Marker 
*/ 
    var clickFeature = new OpenLayers.Control.SelectFeature(layerTrackMarker, 
     {} 
    ); 
    map.addControl(clickFeature); 
    layerTrackMarker.events.on({ 
        "featureselected": function(e) { 
         var markerId = e.feature.geometry.id; 
         removeMarker(markerId); 
         /* ToDo: show context menu */ 
        }, 
        "featureunselected": function(e) { 
         /* ToDo: hide context menu */ 
        } 
       }); 
    clickFeature.activate(); 

답변

9

필자는 테스트하지 않았지만이 작업과 비슷하지 않습니까?

var dragged = false; 
var dragFeature = new OpenLayers.Control.DragFeature(layerTrackMarker, { 
    onComplete: function(){ 
     if(dragged){ 
      dragCallback(); 
     }else{ 
      clickCallback(); 
     } 
    }, 
    onStart: function(){ 
     dragged = false; 
    }, 
    onDrag: function(){ 
     dragged = true; 
    } 
}); 
map.addControl(dragFeature); 
dragFeature.activate(); 

편집 : 실제 드래그가없는 경우 onComplete는 실행되지 않습니다. http://jsfiddle.net/reKRr/5/

편집 : 다음은 작업 코드

var dragged = false; 
var dragFeature = new OpenLayers.Control.DragFeature(pointLayer, { 
    onStart: function(){dragged = false;}, 
    onDrag: function() {dragged = true;} 
}); 

map.addControl(dragFeature); 
dragFeature.activate(); 

map.events.register("mouseup", map , function(e){ 
    if(dragged == true){ 
     alert("dragged"); 
    }else{ 
     alert("clicked"); 
    } 
}); 

jsFiddle의이 일을 덜 해키 방법이

var selectFeature = new OpenLayers.Control.SelectFeature(
    pointLayer, 
    { 
     onSelect: function(){    
      alert("selected"); 
     } 
    } 
); 

var dragFeature = new OpenLayers.Control.DragFeature(pointLayer, { 
    onComplete: function(){ 
     alert("drag"); 
    } 
}); 

dragFeature.handlers['drag'].stopDown = false; 
dragFeature.handlers['drag'].stopUp = false; 
dragFeature.handlers['drag'].stopClick = false; 
dragFeature.handlers['feature'].stopDown = false; 
dragFeature.handlers['feature'].stopUp = false; 
dragFeature.handlers['feature'].stopClick = false; 

map.addControls([selectFeature,dragFeature]); 

selectFeature.activate(); 
dragFeature.activate(); 
+0

그래, 와우. 너는 나의 하루를 구했다! 하나만 남았습니다. 마우스를 올리면 마커의 선택을 취소 할 수 있습니까? 그렇다면 동일한 마커에서 두 번째 클릭을 인식 할 수 있습니까? – madc

+0

고마워, 알았어. \t onSelect를 : 함수() { \t \t \t \t // 내 funktion ... \t \t \t \t this.unselectAll(); \t} – madc