Google Maps Marker Show/hide

前端 未结 1 1213
隐瞒了意图╮
隐瞒了意图╮ 2020-12-16 02:12

I tried several codes and searched a lot for an answer, but I can\'t get this to work. I know very little of Javascript, so i\'m hopping someone can help me with this, cause

1条回答
  •  伪装坚强ぢ
    2020-12-16 02:26

    working fiddle

    You need to look at the javascript console.

    • fixed createMarker to use v3 syntax and used it.
    • initialized arrays in markerGroups[type]
    • there is no .isHidden method for a google.maps.Marker it is .getVisible.
    • there are no .show() or .hide() methods for a google.maps.Marker, it is .setVisible.
    • there are no marker shadows in v3 since the implementation of the "visual refresh"

    (can't test your custom markers, you didn't provide them)

    working code snippet:

    var infoWindow = new google.maps.InfoWindow();
    var customIcons = {
      monumento: {
        icon: 'http://maps.google.com/mapfiles/ms/icons/blue.png'
      },
      hotel: {
        icon: 'http://maps.google.com/mapfiles/ms/icons/green.png'
      },
      restaurantes: {
        icon: 'http://maps.google.com/mapfiles/ms/icons/yellow.png'
      },
      museus: {
        icon: 'http://maps.google.com/mapfiles/ms/icons/purple.png'
      }
    };
    
    var markerGroups = {
      "museus": [],
      "monumentos": [],
      "restaurantes": [],
      "hotel": []
    };
    
    function load() {
      var map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(38.639104, -8.210413),
        zoom: 12,
        mapTypeId: 'roadmap'
      });
      var infoWindow = new google.maps.InfoWindow();
    
    
    
      map.set('styles', [{
        zoomControl: false
      }, {
        featureType: "road.highway",
        elementType: "geometry.fill",
        stylers: [{
          color: "#ffd986"
        }]
      }, {
        featureType: "road.arterial",
        elementType: "geometry.fill",
        stylers: [{
          color: "#9e574f"
        }]
      }, {
        featureType: "road.local",
        elementType: "geometry.fill",
        stylers: [{
            color: "#d0cbc0"
          }, {
            weight: 1.1
          }
    
        ]
      }, {
        featureType: 'road',
        elementType: 'labels',
        stylers: [{
          saturation: -100
        }]
      }, {
        featureType: 'landscape',
        elementType: 'geometry',
        stylers: [{
          hue: '#ffff00'
        }, {
          gamma: 1.4
        }, {
          saturation: 82
        }, {
          lightness: 96
        }]
      }, {
        featureType: 'poi.school',
        elementType: 'geometry',
        stylers: [{
          hue: '#fff700'
        }, {
          lightness: -15
        }, {
          saturation: 99
        }]
      }]);
    
      //         downloadUrl("markers.xml", function (data) {
      var xml = xmlParse(xmlData);
      // var xml = data.responseXML;
      var markers = xml.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var type = markers[i].getAttribute("type");
    
        var point = new google.maps.LatLng(
          parseFloat(markers[i].getAttribute("lat")),
          parseFloat(markers[i].getAttribute("lng")));
        var html = "" + name + " 
    " + address; // var icon = customIcons[type] || {}; var marker = createMarker(point, name, address, type, map); bindInfoWindow(marker, map, infoWindow, html); } // }); } function createMarker(point, name, address, type, map) { var icon = customIcons[type] || {}; var marker = new google.maps.Marker({ map: map, position: point, icon: icon.icon, // shadow: icon.shadow, type: type }); if (!markerGroups[type]) markerGroups[type] = []; markerGroups[type].push(marker); var html = "" + name + "
    " + address; bindInfoWindow(marker, map, infoWindow, html); return marker; } function toggleGroup(type) { for (var i = 0; i < markerGroups[type].length; i++) { var marker = markerGroups[type][i]; if (!marker.getVisible()) { marker.setVisible(true); } else { marker.setVisible(false); } } } function bindInfoWindow(marker, map, infoWindow, html) { google.maps.event.addListener(marker, 'click', function() { infoWindow.setContent(html); infoWindow.open(map, marker); }); } function downloadUrl(url, callback) { var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState == 4) { request.onreadystatechange = doNothing; callback(request, request.status); } }; request.open('GET', url, true); request.send(null); } function doNothing() {} google.maps.event.addDomListener(window, 'load', load); var xmlData = ''; function xmlParse(str) { if (typeof ActiveXObject != 'undefined' && typeof GetObject != 'undefined') { var doc = new ActiveXObject('Microsoft.XMLDOM'); doc.loadXML(str); return doc; } if (typeof DOMParser != 'undefined') { return (new DOMParser()).parseFromString(str, 'text/xml'); } return createElement('div', null); }
    html,
    body,
    #map,
    #map_wrap {
      height: 100%;
      width: 100%;
    }
    
    
      Monuments (blue) Museums (purple) Restaurants (yellow) Hotels (green)

    0 讨论(0)
提交回复
热议问题