0

Я пытаюсь получить карту с выпадающими маркерами (каждый с инфо-окном). Несколько маркеров должны начинаться с кнопки HTML/CSS. Infowindows должен иметь другой текст. Я не могу построить даже с одним и тем же текстом в каждом infowindows. В консольном браузере я вижу сообщение: «SCRIPT445: Object не поддерживает это действие». Я вообще не могу вызвать Infowidow. Мой код б/у из Google примеров/ниже:google maps api animation и несколько infowindows

<!DOCTYPE html> 
     <html> 
     <head> 
     <meta charset="utf-8"> 
     <title>Marker animations with <code>setTimeout()</code></title> 
     <style> 
       html, body { 
       height: 100%; 
       margin: 0; 
       padding: 0; 
       } 
       #map { 
       height: 100%; 
       } 
     #floating-panel { 
      position: absolute; 
      top: 10px; 
      left: 25%; 
      z-index: 5; 
      background-color: #fff; 
      padding: 5px; 
      border: 1px solid #999; 
      text-align: center; 
      font-family: 'Roboto','sans-serif'; 
      line-height: 30px; 
      padding-left: 10px; 
     } 

       #floating-panel { 
       margin-left: -52px; 
       } 
      </style> 
      </head> 
      <body> 
      <div id="floating-panel"> 
       <button id="drop" onclick="drop()">Drop Markers</button> 
      </div> 
      <div id="map"></div> 
      <script async defer 
     src=   "https://maps.googleapis.com/maps/api/jssigned_in=true&libraries=places&callback=initMap"> 
     </script> 
     <script> 
     var neighborhoods = [ 
      {lat: 52.511, lng: 13.447, name: "2007"}, 
      {lat: 52.549, lng: 13.422, name: "2008"}, 
      {lat: 52.497, lng: 13.396, name: "2009"}, 
      {lat: 52.517, lng: 13.394, name: "2010"} 
     ]; 

     var markers = []; 
     var map; 

     function initMap() { 
      map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 12, 
      center: {lat: 52.520, lng: 13.410} 
      }); 
     } 


     function drop() { 
      clearMarkers(); 
      for (var i = 0; i < neighborhoods.length; i++) { 
      addMarkerWithTimeout(neighborhoods[i], i * 200); 
      } 
     } 
     var contentString = '<div id="content">'+ 
       '<div id="siteNotice">'+ 
       '</div>'+ 
       '<h1 id="firstHeading" class="firstHeading">Uluru</h1>'+ 
       '<div id="bodyContent">'+ 
       '<p><b>Uluru</b>, also referred to as <b>Ayers Rock</b>, is a large ' + 
       'sandstone rock formation in the southern part of the '+ 
       'Northern Territory, central Australia. It lies 335&#160;km (208&#160;mi) '+ 
       'south west of the nearest large town, Alice Springs; 450&#160;km '+ 
       '(280&#160;mi) by road. Kata Tjuta and Uluru are the two major '+ 
       'features of the Uluru - Kata Tjuta National Park. Uluru is '+ 
       'sacred to the Pitjantjatjara and Yankunytjatjara, the '+ 
       'Aboriginal people of the area. It has many springs, waterholes, '+ 
       'rock caves and ancient paintings. Uluru is listed as a World '+ 
       'Heritage Site.</p>'+ 
       '<p>Attribution: Uluru, <a   href="https://en.wikipedia.org/w/index.php?title=Uluru&oldid=297882194">'+ 
       'https://en.wikipedia.org/w/index.php?title=Uluru</a> '+ 
       '(last visited June 22, 2009).</p>'+ 
       '</div>'+ 
       '</div>'; 

     function addMarkerWithTimeout(position, timeout) { 
      window.setTimeout(function() { 
      var data = position; 
      var marker = new google.maps.Marker({ 
       position: position, 
       map: map, 
       title: data.name, 
       animation: google.maps.Animation.DROP 
      }); 
      markers.push(marker); 
      var infowindow = new google.maps.infowindowInfo({ 
       content: contentString, 
      }); 
      google.maps.event.addListener(marker, function() { 
       if (this.getMap()) { 
        infowindow.open(this.getMap(), this); 
       } else { 
        infowindow.close() 
       } 
       }); 
      }, timeout); 
     } 


     function clearMarkers() { 
      for (var i = 0; i < markers.length; i++) { 
      markers[i].setMap(null); 
      } 
      markers = []; 
     } 

     google.maps.event.addDomListener(window, 'load', initMap); 
     </script> 
      </body> 
     </html 
+0

Для начала я получаю javascript-ошибку с вашим кодом 'Uncaught TypeError: google.maps.infowindowInfo не является функцией'. Javascript чувствителен к регистру, это должно быть 'google.maps.InfoWindow' – geocodezip

+0

Возможный дубликат [API JS API для Google Maps v3 - Пример простого множественного маркера] (http://stackoverflow.com/questions/3059044/google-maps-js- api-v3-simple-multiple-marker-example) – geocodezip

+0

http://stackoverflow.com/questions/11425475/settimeout-marker-animation-nothing-seems-to-work посмотреть здесь – Mehmet

ответ

0

решения Простейшего, передать нужный HTML в замыканию в addMarkersWithTimeout функции и функции использования (как это делается в ответ на Google Maps JS API v3 - Simple Multiple Marker Example), чтобы связать содержание маркеров с слушателя событий нажмите для этого маркеров:

function addMarkerWithTimeout(position, html, timeout) { 
    window.setTimeout(function() { 
    var data = position; 
    var marker = new google.maps.Marker({ 
     position: position, 
     map: map, 
     title: data.name, 
     animation: google.maps.Animation.DROP 
    }); 
    markers.push(marker); 
    var infowindow = new google.maps.InfoWindow({ 
     content: html, 
    }); 
    google.maps.event.addListener(marker, 'click', (function(marker, html) { 
     return function() { 
     if (this.getMap()) { 
      infowindow.open(this.getMap(), this); 
     } else { 
      infowindow.close() 
     } 
     } 
    })(marker, html)); 
    }, timeout); 
} 

proof of concept fiddle

фрагмент кода:

function addMarkerWithTimeout(position, html, timeout) { 
 
    window.setTimeout(function() { 
 
    var data = position; 
 
    var marker = new google.maps.Marker({ 
 
     position: position, 
 
     map: map, 
 
     title: data.name, 
 
     animation: google.maps.Animation.DROP 
 
    }); 
 
    markers.push(marker); 
 
    var infowindow = new google.maps.InfoWindow({ 
 
     content: html, 
 
    }); 
 
    google.maps.event.addListener(marker, 'click', (function(marker, html) { 
 
     return function() { 
 
     if (this.getMap()) { 
 
      infowindow.open(this.getMap(), this); 
 
     } else { 
 
      infowindow.close() 
 
     } 
 
     } 
 
    })(marker, html)); 
 
    }, timeout); 
 
} 
 

 
function initMap() { 
 
    map = new google.maps.Map(document.getElementById('map'), { 
 
    zoom: 12, 
 
    center: { 
 
     lat: 52.520, 
 
     lng: 13.410 
 
    } 
 
    }); 
 
} 
 

 

 
function drop() { 
 
    clearMarkers(); 
 
    for (var i = 0; i < neighborhoods.length; i++) { 
 
    if (i == 0) { 
 
     html = contentString 
 
    } else { 
 
     html = "html " + i 
 
    } 
 
    addMarkerWithTimeout(neighborhoods[i], html, i * 200); 
 
    } 
 
} 
 
var contentString = '<div id="content">' + 
 
    '<div id="siteNotice">' + 
 
    '</div>' + 
 
    '<h1 id="firstHeading" class="firstHeading">Uluru</h1>' + 
 
    '<div id="bodyContent">' + 
 
    '<p><b>Uluru</b>, also referred to as <b>Ayers Rock</b>, is a large ' + 
 
    'sandstone rock formation in the southern part of the ' + 
 
    'Northern Territory, central Australia. It lies 335&#160;km (208&#160;mi) ' + 
 
    'south west of the nearest large town, Alice Springs; 450&#160;km ' + 
 
    '(280&#160;mi) by road. Kata Tjuta and Uluru are the two major ' + 
 
    'features of the Uluru - Kata Tjuta National Park. Uluru is ' + 
 
    'sacred to the Pitjantjatjara and Yankunytjatjara, the ' + 
 
    'Aboriginal people of the area. It has many springs, waterholes, ' + 
 
    'rock caves and ancient paintings. Uluru is listed as a World ' + 
 
    'Heritage Site.</p>' + 
 
    '<p>Attribution: Uluru, <a   href="https://en.wikipedia.org/w/index.php?title=Uluru&oldid=297882194">' + 
 
    'https://en.wikipedia.org/w/index.php?title=Uluru</a> ' + 
 
    '(last visited June 22, 2009).</p>' + 
 
    '</div>' + 
 
    '</div>'; 
 

 

 
function clearMarkers() { 
 
    for (var i = 0; i < markers.length; i++) { 
 
    markers[i].setMap(null); 
 
    } 
 
    markers = []; 
 
} 
 
var neighborhoods = [{ 
 
    lat: 52.511, 
 
    lng: 13.447, 
 
    name: "2007" 
 
}, { 
 
    lat: 52.549, 
 
    lng: 13.422, 
 
    name: "2008" 
 
}, { 
 
    lat: 52.497, 
 
    lng: 13.396, 
 
    name: "2009" 
 
}, { 
 
    lat: 52.517, 
 
    lng: 13.394, 
 
    name: "2010" 
 
}]; 
 

 
var markers = []; 
 
var map; 
 
google.maps.event.addDomListener(window, 'load', initMap);
html, 
 
body { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
#map { 
 
    height: 100%; 
 
} 
 
#floating-panel { 
 
    position: absolute; 
 
    top: 10px; 
 
    left: 25%; 
 
    z-index: 5; 
 
    background-color: #fff; 
 
    padding: 5px; 
 
    border: 1px solid #999; 
 
    text-align: center; 
 
    font-family: 'Roboto', 'sans-serif'; 
 
    line-height: 30px; 
 
    padding-left: 10px; 
 
} 
 
#floating-panel { 
 
    margin-left: -52px; 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="floating-panel"> 
 
    <button id="drop" onclick="drop()">Drop Markers</button> 
 
</div> 
 
<div id="map"></div>

+0

Теперь все ясно. Thx для решения и вашей помощи. Я очень ценю это! – jarex

0

Вы просто два незначительных опечаток.

В вашей метке script. Там должно быть ? между js и signed_in в URL:

<script async defer src="https://maps.googleapis.com/maps/api/js?signed_in=true&libraries=places&callback=initMap"> 

Затем, в конце вашего примера кода, ваш html тег отсутствует закрытие >.

Если вы исправите эти две проблемы, ваша карта загрузится.

+0

Thx для вашей помощи и комментариев. Карта загружается, но инфо-окна все еще не работают. – jarex

Смежные вопросы