Guest User

Untitled

a guest
Aug 5th, 2012
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  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. };
Advertisement
Add Comment
Please, Sign In to add comment