Google通过确认来映射dragstart和dragend

时间:2018-02-16 20:04:21

标签: javascript google-maps google-maps-markers geocoding

如果我想移动标记并且我在确认警报中点击“是”,标记将移动到dragend位置但是当我在确认警报中单击“否”时我有问题。标记应移动到dragstart位置,但在当前代码中,标记保持在dragend位置而不是dragstart位置。有人请帮助我。三江源

<!DOCTYPE html>
<html>
<body>

<p><span id="start"></span></p>
<p><span id="end"></span></p>
<div id="map" style="width:100%;height:500px"></div>

<script>
function initMap() {
     var theLat      = 51.508742;
     var theLng      = -0.120850;
     var displayMap  = document.getElementById("map");
     var myLatlng    = new google.maps.LatLng(theLat, theLng);
     var myOptions   = {
          zoom: 5,
          center: myLatlng,
          mapTypeId: google.maps.MapTypeId.ROADMAP
     }

     var map         = new google.maps.Map(displayMap, myOptions);
     var marker      = new google.maps.Marker({
          position: myLatlng,
          map: map,
          draggable: true
     });

     google.maps.event.addListener(marker, 'dragend', function() {
          if (confirm("Are You Sure You Want To Move this marker?")) {
               var positionStartLatNew = this.position.lat();
               var positionStartLngNew = this.position.lng();
               document.getElementById('end').innerHTML = "Lat end : " + positionStartLatNew + ", " + "Lng end : " + positionStartLngNew;
          } else {
               google.maps.event.addListener(marker, 'dragstart', function() {
               var positionStartLat = this.position.lat();
               var positionStartLng = this.position.lng();
               document.getElementById('start').innerHTML = "Lat start : " + positionStartLat + ", " + "Lng start : " + positionStartLng;
               });
          }
     });
}
</script>

<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDuDtGMwgHfy9Nb07ARmHlsT-Zen228uK4&callback=initMap"></script>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

根据我的理解,这是可能的解决方案:

google.maps.event.addListener(marker, 'dragend', function() {
      if (confirm("Are You Sure You Want To Move this marker?")) {
           var positionStartLatNew = this.position.lat();
           var positionStartLngNew = this.position.lng();
           document.getElementById('end').innerHTML = "Lat end : " + 
           positionStartLatNew + ", " + "Lng end : " + positionStartLngNew;
      } else {
        marker.setPosition(myLatlng);
      }
 });

只需更改else块内的代码,以便标记移回原始latLng位置。

This is a JSBIN example

答案 1 :(得分:0)

将位置保存在dragstart的可访问范围内。取消确认对话框时,使用该位置恢复标记:

 var positionStart, positionStartNew;
 google.maps.event.addListener(marker, 'dragstart', function() {
           positionStart = this.position;
           document.getElementById('start').innerHTML = "start position: " + positionStart.toUrlValue(6);
 });
 google.maps.event.addListener(marker, 'dragend', function() {
   if (confirm("Are You Sure You Want To Move this marker?")) {
     positionStartNew = this.position;
     document.getElementById('end').innerHTML = "end position: " + positionStartNew.toUrlValue(6);
   } else {
     marker.setPosition(positionStart);
   }
 });

proof of concept fiddle

screenshot of map after cancelling the dialog box

代码段

function initMap() {
  var theLat = 51.508742;
  var theLng = -0.120850;
  var displayMap = document.getElementById("map");
  var myLatlng = new google.maps.LatLng(theLat, theLng);
  var myOptions = {
    zoom: 5,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  var map = new google.maps.Map(displayMap, myOptions);
  var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    draggable: true
  });
  var positionStart, positionStartNew;
  google.maps.event.addListener(marker, 'dragstart', function() {
    positionStart = this.position;
    document.getElementById('start').innerHTML = "start position: " + positionStart.toUrlValue(6);
  });
  google.maps.event.addListener(marker, 'dragend', function() {
    if (confirm("Are You Sure You Want To Move this marker?")) {
      positionStartNew = this.position;
      document.getElementById('end').innerHTML = "end position: " + positionStartNew.toUrlValue(6);
    } else {
      marker.setPosition(positionStart);
    }
  });
}
google.maps.event.addDomListener(window, "load", initMap);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px;
  background-color: white;
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="start"></div>
<div id="end"></div>
<div id="map"></div>