2011-08-05 32 views
6

地図上にマーカーとして表示するためのベクターレイヤーがありますが、現在ではmather、emighter draggableまたはclickableです。私は両方を得るために何ができますか?マーカーをドラッグ可能にしてクリック可能にする

/*** 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/

EDIT:ここで作業コード

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

ええ、うわー。あなたは私の一日を救った! 残っているのは1つだけです。マウスの上のマーカーの選択を解除する可能性はありますか?それで、同じマーカーのセカンドクリックを認識しますか? – madc

+0

ありがとう、それを得た。 \tにonSelect:機能(){ \t \t \t \t //マイfunktion ... \t \t \t \t this.unselectAll(); \t} – madc

関連する問題