7

我们遇到了与Google Maps API V3相关的问题。问题是,当我们拖动标记时,地图也开始拖动。

我们仅在 Windows 8 Environment + Internet Explorer 的触摸屏上遇到此问题,在普通屏幕/移动屏幕 - IPaid/其他浏览器(Safari 和 FireFox)上正常。

我们使用了以下解决方案,但它在Internet Explorer9 和 10eval javascript error中引发错误( ):

google.maps.event.addListener(marker, 'dragstart', function(){
    mapObject.setOptions({ draggable: false });
});
google.maps.event.addListener(marker, 'dragend', function(){
    mapObject.setOptions({ draggable: true });
}); 

示例代码在这里

我们也在这里报告了这个问题: gmaps-api-issues

编辑:

我们也在这里发布了一个相关的问题

4

1 回答 1

4

终于取得了一些成功(地图仍然移动了一点,但目前可以忽略)!

声明了两个变量:

var isAnyMarkerIsInDraggingState = false;// if a marker is in drag state this value will be TRUE otherwise FALSE
var mapCenterPositionAtTheTimeWhenMarkerWasDragged;// Map Center Position

拖动标记时:

   google.maps.event.addListener(objMarker, 'dragstart', function () {
        // Store map center position when a marker is dragged
        mapCenterPositionAtTheTimeWhenMarkerWasDragged = mapObject.getCenter();
        isAnyMarkerIsInDraggingState = true;
    });

放下标记时(拖动结束):

google.maps.event.addListener(objMarker, 'dragend', function () {
    // Make Map draggable
    // Set isAnyMarkerIsInDraggingState = false. Because no marker is in drag state
    mapObject.setOptions({ draggable: true });
    isAnyMarkerIsInDraggingState = false;
});

当地图拖动开始时:

google.maps.event.addListener(mapObject, 'dragstart', function () {
    // isAnyMarkerIsInDraggingState = true: means the user is dragging a marker.
    // If the user is dragging the Marker then don't allow the Map to be Dragged
    if (isAnyMarkerIsInDraggingState) {
        mapObject.setOptions({ draggable: false });
    }
});

地图处于拖动状态时:

google.maps.event.addListener(mapObject, 'drag', function () {
    // isAnyMarkerIsInDraggingState = true: means the user is dragging a marker.
    // If the user is dragging the Marker then don't allow the Map to be Dragged and set its CenterPosition
    // to mapCenterPositionAtTheTimeWhenMarkerWasDragged

    if (isAnyMarkerIsInDraggingState) {
        mapObject.setCenter(mapCenterPositionAtTheTimeWhenMarkerWasDragged);
    }
});

完整的示例代码在这里

于 2013-04-24T10:00:02.883 回答