2016-03-04 4 views
4

Я сделал функцию перетаскивания и падение, так что пользователи могут перетащить значок на боковой панели, и когда они падение значок, маркер помещается.Перетаскивание Карты Google Marker

Представленная ниже реализация показалась лучшим (только) способом ее достижения, но проблемы возникают, когда сеть работает медленно, предположительно потому, что lat/lng из события mouseover (очень) неточно.

Может ли кто-нибудь предложить альтернативный способ, я мог бы это сделать? Возможно, сразу поместив маркер, а затем используя встроенные карты drag-n-drop?

function placeMarker(lat, lng) { 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(lat, lng), 
    draggable: true, 
    map: map 
    }); 
    return marker; 
} 

$(".icon").draggable({helper: 'clone', 

    start: function(e, ui) { 
    map.setOptions({draggable: false}); 
    $("#map").css('cursor', 'crosshair'); 
    }, 

    stop: function(e,ui) { 
    map.setOptions({draggable: true}); 
    $("#map").css('cursor', 'default'); 

    google.maps.event.addListenerOnce(map, "mouseover", function(event) { 
     var lat = event.latLng.lat(), 
      lng = event.latLng.lng(), 
      id = ui.helper.context.id; 

     pointA = id === "pointA" && pointA === true 
         ? pointA.setMap(null) : placeMarker(lat, lng); 

     pointB = id === "pointB" && pointB === true 
         ? pointB.setMap(null) : placeMarker(lat, lng); 
    }); 
    } 
}); 
+1

Что такое * проблемы *, которые происходят? –

+1

Маркер занимает много места, и когда он делает это, он помещается в неправильном месте на карте. – seanbrodie

+0

Возможно, попробуйте использовать 'google.maps.Geocoder()' службу https://developers.google.com/maps/documentation/javascript/geocoding –

ответ

1

Проблема решается при использовании mousemove события вместо mouseover.

Я думаю, что это событие, которое я должен был использовать все время. Низкая латентность, очевидно, мешает начальному событию mouseover не срабатывать при удалении штыря.

Надеюсь, это поможет другим.