Я не проверял это, но разве это не сработало?
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 не срабатывает, если не было никакого реального перетаскивания.Вот рабочий код
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: http://jsfiddle.net/reKRr/5/
РЕДАКТИРОВАТЬ: это менее хакерский способ сделать это
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();