Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 5th, 2012  |  syntax: None  |  size: 2.40 KB  |  hits: 18  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. var LabeledMarkerOverlay = function(marker) {
  2.     this.marker = marker;
  3.  
  4.     this.el = document.createElement('div');
  5.     this.el.className = 'marker-label';
  6. };
  7.  
  8. LabeledMarkerOverlay.prototype = new google.maps.OverlayView();
  9.  
  10. LabeledMarkerOverlay.prototype.onAdd = function() {
  11.     this.getPanes().overlayImage.appendChild(this.el);
  12.  
  13.     google.maps.event.addListener(this.marker, 'position_changed', this.updatePosition);
  14.     google.maps.event.addListener(this.marker, 'zindex_changed', this.updateZIndex);
  15.     google.maps.event.addListener(this.marker, 'visible_changed', this.updateVisible);
  16. };
  17.  
  18. LabeledMarkerOverlay.prototype.onRemove = function () {
  19.     this.el.parentNode.removeChild(this.el);
  20.  
  21.     google.maps.event.clearListeners(this.marker, 'position_changed');
  22.     google.maps.event.clearListeners(this.marker, 'zindex_changed');
  23.     google.maps.event.clearListeners(this.marker, 'visible_changed');
  24. };
  25.  
  26. LabeledMarkerOverlay.prototype.draw = function() {
  27.     this.updateContent();
  28.     this.updatePosition();
  29. };
  30.  
  31. LabeledMarkerOverlay.prototype.setMarker = function(marker) {
  32.     this.marker = marker;
  33. };
  34.  
  35. LabeledMarkerOverlay.prototype.updateContent = function() {
  36.     var label = this.marker.get('label');
  37.  
  38.     if (label) {
  39.         this.el.innerHTML = label;
  40.     }
  41. };
  42.  
  43. LabeledMarkerOverlay.prototype.updatePosition = function() {
  44.     var position = this.getProjection().fromLatLngToDivPixel(this.marker.getPosition());
  45.  
  46.     this.el.style.left = Math.round(position.x) + 'px';
  47.     this.el.style.top = Math.round(position.y) + 'px';
  48.  
  49.     this.updateZIndex();
  50. };
  51.  
  52. LabeledMarkerOverlay.prototype.updateVisible = function() {
  53.     this.el.style.display = this.marker.getVisible() ? 'block' : 'none';
  54. };
  55.  
  56. LabeledMarkerOverlay.prototype.updateZIndex = function() {
  57.     var zIndex = (this.marker.getZIndex() || parseInt(this.el.style.top, 10));
  58.  
  59.     this.el.style.zIndex = zIndex;
  60. };
  61.  
  62. google.maps.LabeledMarker = function(options) {
  63.     options = options || {};
  64.     options.label = options.label || '';
  65.     options.optimized = false;
  66.  
  67.     this.overlay = new LabeledMarkerOverlay(this);
  68.  
  69.     google.maps.Marker.call(this, options);
  70. };
  71.  
  72. google.maps.LabeledMarker.prototype = new google.maps.Marker();
  73.  
  74. google.maps.LabeledMarker.prototype.setLabel = function(label) {
  75.     this.set('label', label);
  76. };
  77.  
  78. google.maps.LabeledMarker.prototype.setMap = function(map) {
  79.     google.maps.Marker.prototype.setMap.apply(this, arguments);
  80.  
  81.     this.overlay.setMap(map);
  82. };