Сделать маркер перетаскиваемым и кликабельным - PullRequest
6 голосов
/ 05 августа 2011

У меня есть векторный слой для отображения маркеров как объектов на моей карте, но теперь, что бы я ни делал, они могут быть перетаскиваемыми или кликабельными. Что я могу сделать, чтобы получить оба?

/*** 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();

1 Ответ

9 голосов
/ 06 августа 2011

Я не проверял это, но разве это не сработало?

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...