2016-11-02 44 views
-1

我知道這個問題之前已被問及我已經遵循了幾個答案,但似乎沒有工作。我得到的最接近是這樣一個this.setValues是不是一個函數谷歌地圖API 3

Map Markers Not Displaying (JavaScript/Google Maps API V3)

但在這裏,我不知道他想要做的,但是我覺得我的情況是不同的,並沒有爲我工作。 所以請任何人有任何sugeestions請告訴我。

function initialize() { 
 
      var mapOptions = { 
 
       zoom: 16, 
 
       center: new google.maps.LatLng(52.5498783, 13.425209099999961), 
 
       mapTypeId: google.maps.MapTypeId.SATELLITE 
 
      }; 
 

 
      map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
 
      
 
      overlay = new DraggableOverlay(map, 
 
              map.getCenter(), 
 
              '<div class="overlay">drag me!</div>' 
 
        ); 
 

 

 
     } 
 
     
 
     DraggableOverlay.prototype = new google.maps.OverlayView(); 
 

 
     DraggableOverlay.prototype.onAdd = function() { 
 
      var container = document.createElement('div'), 
 
       that = this; 
 

 
      if (typeof this.get('content').nodeName !== 'undefined') { 
 
       container.appendChild(this.get('content')); 
 
      } 
 
      else { 
 
       if (typeof this.get('content') === 'string') { 
 
        container.innerHTML = this.get('content'); 
 
       } 
 
       else { 
 
        return; 
 
       } 
 
      } 
 
      container.style.position = 'absolute'; 
 
      container.draggable = true; 
 
      google.maps.event.addDomListener(this.get('map').getDiv(), 
 
              'mouseleave', 
 
               function() { 
 
                google.maps.event.trigger(container, 'mouseup'); 
 
               } 
 
      ); 
 

 

 
      google.maps.event.addDomListener(container, 
 
              'mousedown', 
 
             function (e) { 
 
              this.style.cursor = 'move'; 
 
              that.map.set('draggable', false); 
 
              that.set('origin', e); 
 

 
              that.moveHandler = google.maps.event.addDomListener(that.get('map').getDiv(), 
 
                            'mousemove', 
 
                            function (e) { 
 
                             var origin = that.get('origin'), 
 
                              left = origin.clientX - e.clientX, 
 
                              top = origin.clientY - e.clientY, 
 
                              pos = that.getProjection() 
 
                                .fromLatLngToDivPixel(that.get('position')), 
 
                              latLng = that.getProjection() 
 
                                .fromDivPixelToLatLng(new google.maps.Point(pos.x - left, 
 
                                           pos.y - top)); 
 
                             that.set('origin', e); 
 
                             that.set('position', latLng); 
 
                             that.draw(); 
 
                            }); 
 

 

 
             } 
 
      ); 
 

 
      google.maps.event.addDomListener(container, 'mouseup', function() { 
 
       that.map.set('draggable', true); 
 
       this.style.cursor = 'default'; 
 
       google.maps.event.removeListener(that.moveHandler); 
 
      }); 
 

 

 
      this.set('container', container) 
 
      this.getPanes().floatPane.appendChild(container); 
 
     }; 
 

 
     function DraggableOverlay(map, position, content) { 
 
      if (typeof draw === 'function') { 
 
       this.draw = draw; 
 
      } 
 
      this.setValues({ 
 
       position: position, 
 
       container: null, 
 
       content: content, 
 
       map: map 
 
      }); 
 
     } 
 

 

 

 
     DraggableOverlay.prototype.draw = function() { 
 
      var pos = this.getProjection().fromLatLngToDivPixel(this.get('position')); 
 
      this.get('container').style.left = pos.x + 'px'; 
 
      this.get('container').style.top = pos.y + 'px'; 
 
     }; 
 

 
     DraggableOverlay.prototype.onRemove = function() { 
 
      this.get('container').parentNode.removeChild(this.get('container')); 
 
      this.set('container', null) 
 
     }; 
 

 

 
     google.maps.event.addDomListener(window, 'load', initialize);
html, body, #map-canvas { 
 
     height: 100%; 
 
     margin: 0px; 
 
     padding: 0px 
 
     } 
 
     .overlay{ 
 
     background:yellow; 
 
     padding:30px; 
 
     border:4px double black; 
 
     }
<div id="map-canvas"></div> 
 
    <script async defer 
 
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyD7FTNE22Wl6S6DTQF83sTZTqbFFPzEkmU&libraries=drawing,places,geometry&callback=initialize"> 
 
    
 
    </script>

所以在這裏你可以看到我得到兩個問題

  • 谷歌沒有定義
  • this.setValues不是一個函數

所以如果有人遇到這個問題,請讓我知道。

回答

0

google is not defined:如果異步加載API,你需要把所有依賴於回調函數內部的API(你的情況initialize)的代碼。在API加載之前,依賴於API的任何內容都將無法工作。 您需要將DraggableOverlay的定義移至initialize之內或同步加載API。下面

實施例而不API的異步負載(如the example in the documentationDr.Molle's answer that it looks like the DraggableOverlay came from: Can we make custom overlays draggable on google maps V3

function initialize() { 
 
    var mapOptions = { 
 
    zoom: 16, 
 
    center: new google.maps.LatLng(52.5498783, 13.425209099999961), 
 
    mapTypeId: google.maps.MapTypeId.SATELLITE 
 
    }; 
 

 
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
 

 
    overlay = new DraggableOverlay(map, 
 
    map.getCenter(), 
 
    '<div class="overlay">drag me!</div>' 
 
); 
 
} 
 

 
DraggableOverlay.prototype = new google.maps.OverlayView(); 
 
DraggableOverlay.prototype.onAdd = function() { 
 
    var container = document.createElement('div'), 
 
    that = this; 
 

 
    if (typeof this.get('content').nodeName !== 'undefined') { 
 
    container.appendChild(this.get('content')); 
 
    } else { 
 
    if (typeof this.get('content') === 'string') { 
 
     container.innerHTML = this.get('content'); 
 
    } else { 
 
     return; 
 
    } 
 
    } 
 
    container.style.position = 'absolute'; 
 
    container.draggable = true; 
 
    google.maps.event.addDomListener(this.get('map').getDiv(), 
 
    'mouseleave', 
 
    function() { 
 
     google.maps.event.trigger(container, 'mouseup'); 
 
    } 
 
); 
 

 
    google.maps.event.addDomListener(container, 
 
    'mousedown', 
 
    function(e) { 
 
     this.style.cursor = 'move'; 
 
     that.map.set('draggable', false); 
 
     that.set('origin', e); 
 

 
     that.moveHandler = google.maps.event.addDomListener(that.get('map').getDiv(), 
 
     'mousemove', 
 
     function(e) { 
 
      var origin = that.get('origin'), 
 
      left = origin.clientX - e.clientX, 
 
      top = origin.clientY - e.clientY, 
 
      pos = that.getProjection() 
 
      .fromLatLngToDivPixel(that.get('position')), 
 
      latLng = that.getProjection() 
 
      .fromDivPixelToLatLng(new google.maps.Point(pos.x - left, 
 
       pos.y - top)); 
 
      that.set('origin', e); 
 
      that.set('position', latLng); 
 
      that.draw(); 
 
     }); 
 
    } 
 
); 
 
    google.maps.event.addDomListener(container, 'mouseup', function() { 
 
    that.map.set('draggable', true); 
 
    this.style.cursor = 'default'; 
 
    google.maps.event.removeListener(that.moveHandler); 
 
    }); 
 
    this.set('container', container) 
 
    this.getPanes().floatPane.appendChild(container); 
 
}; 
 

 
function DraggableOverlay(map, position, content) { 
 
    if (typeof draw === 'function') { 
 
    this.draw = draw; 
 
    } 
 
    this.setValues({ 
 
    position: position, 
 
    container: null, 
 
    content: content, 
 
    map: map 
 
    }); 
 
}; 
 

 

 
DraggableOverlay.prototype.draw = function() { 
 
    var pos = this.getProjection().fromLatLngToDivPixel(this.get('position')); 
 
    this.get('container').style.left = pos.x + 'px'; 
 
    this.get('container').style.top = pos.y + 'px'; 
 
}; 
 

 
DraggableOverlay.prototype.onRemove = function() { 
 
    this.get('container').parentNode.removeChild(this.get('container')); 
 
    this.set('container', null) 
 
}; 
 

 
google.maps.event.addDomListener(window, 'load', initialize);
html, 
 
body, 
 
#map-canvas { 
 
    height: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
} 
 
.overlay { 
 
    background: yellow; 
 
    padding: 30px; 
 
    border: 4px double black; 
 
}
<div id="map-canvas"></div> 
 
<script src="https://maps.googleapis.com/maps/api/js?libraries=drawing,places,geometry"> 
 
</script>

相關問題