Bing Map pin的dragend成功调用,但Bing Map移动事件仍在继续

时间:2015-08-21 13:01:29

标签: javascript jquery bing-maps

我使用过Bing Maps AJAX Control 7.0版。并在地图上显示引脚。要求就像是,用户可以拖放引脚,当引脚掉落时,它应该移动到它的实际位置。

现在的问题是,当pin的dragend事件被调用时,pin成功设置到其原始位置,但鼠标未释放,当鼠标移动时,map也会被移动。

代码如下:

var isPinDragged = false;

Microsoft.Maps.Events.addHandler(pin, 'dragstart', startDragDetails);
Microsoft.Maps.Events.addHandler(pin, 'drag', dragDetails);
Microsoft.Maps.Events.addHandler(pin, 'dragend', endDragDetails);

function startDragDetails(e) {
    lastLocation = e.entity.getLocation();
    currentLatitude = e.entity._location.latitude;
    currentLongitude = e.entity._location.longitude;
    isPinDragged = false;

    $(e.entity.cm1002_er_etr.dom).find("img").removeClass("droppable");
}

dragDetails = function (e) {
   isPinDragged = true;
};

endDragDetails = function (e) {
    if (isPinDragged) {
        isPinDragged = false;
        $(e.entity.cm1002_er_etr.dom).find("img").addClass("droppable");
        e.entity.setLocation(new Microsoft.Maps.Location(currentLatitude, currentLongitude)); //update pin: move back to old position
    }
};

更新 我不知道,这个信息。多少有助于解决。我的引脚创建是动态的,会有N不。根据用户登录的引脚数。

Microsoft.Maps.loadModule('Microsoft.Maps.Overlays.Style',
{
    callback: function () {
        map = new Microsoft.Maps.Map(document.getElementById("divDailyCashMap"), mapOptions);

        var center = map.getCenter();
        var loc = null;
        var pin = null;

        var pinLayers = new Microsoft.Maps.EntityCollection();
        map.entities.push(pinLayers);

        var infoboxLayers = new Microsoft.Maps.EntityCollection();
        map.entities.push(infoboxLayers);

        pinInfobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(0, 0), { visible: false });
        infoboxLayers.push(pinInfobox);

        $.each(codes, function (index, item) {
            loc = new Microsoft.Maps.Location(item.Latitude, item.Longitude);
            pin = new Microsoft.Maps.Pushpin(loc, { text: '', draggable: true });
            pin.Title = item.Title;
            pin.Description = item.CodeDescription;

            Microsoft.Maps.Events.addHandler(pin, 'click', displayInfobox);
            Microsoft.Maps.Events.addHandler(pin, 'dragstart', startDragDetails);
            Microsoft.Maps.Events.addHandler(pin, 'drag', dragDetails);
            Microsoft.Maps.Events.addHandler(pin, 'dragend', endDragDetails);

            Microsoft.Maps.Events.addHandler(map, 'viewchange', hideInfobox);
            Microsoft.Maps.Events.addHandler(map, 'mousemove', mousemoveDetails);

            pinLayers.push(pin);
                 $(pin.cm1002_er_etr.dom).find('img').addClass("droppable").attr({ "data-pinid": item.Code, "data-lat": item.Latitude, "data-long": item.Longitude });
        });
    }
}

1 个答案:

答案 0 :(得分:1)

在dragDetail()函数中,尝试:

e.handled = true;

它将告诉事件引擎不应该触发其他基础事件。 如果它不起作用,您也可以尝试添加它:

return false;