mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 10:13 Benutzername: Passwort: Auto-Login

Thema: JS: Google Maps Marker - Infofenster ergänzen? vom 08.06.2015


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> JS: Google Maps Marker - Infofenster ergänzen?
Seite: 1, 2  Weiter
Autor Nachricht
qualidat
Threadersteller

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Mo 08.06.2015 15:35
Titel

JS: Google Maps Marker - Infofenster ergänzen?

Antworten mit Zitat Zum Seitenanfang

Kann mir mal bitte jemand helfen? Im folgenden Stück JS-Code werden aus Daten, die in einem Array "locations" stehen, Marker in eine Karte eingefügt. Das funktioniert. Wie müsste der Code ergänzt werden, um beim Klick auf einen Marker eine Info-Bubble ("Infofenster") mit weiteren Angaben zu öffnen? Irgendwas mit "addListener" ... aber alle Beispiele, die ich ausprobiert habe, funktionierten nicht. Syntaktisch waren sie wohl ok, denn das JS lief durch, es passiert nur Nichts beim Klick *Schnief*

Das Problem ist - bitte bei Vorschlägen beachten - dass der Code nur bedingt änderbar ist (ergänzbar ja), weil er nicht klassisch geschrieben, sondern über eine Datenbank (FilemakerPro) dynamisch erzeugt wird. Jede grundlegende Änderung zieht einen ewigen Rattenschwanz anderer Änderungen nach sich.

Danke für Tips!

Code:

function initialize(count) {
         
      var mapOptions = {zoom: 4};   
      var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
         
      for (var i=0; i<count; i++)   {       
      
         marker = new google.maps.Marker({       
            position: new google.maps.LatLng(locations[i][1],locations[i][2]),       
            map:map,       
            labelContent: locations[i][0],   
                                title: locations[i][0],   
            icon: pin_sym(locations[i][3],locations[i][4])});       
            
            bounds.extend(new google.maps.LatLng(locations[i][1],locations[i][2]));   }     
            
      map.fitBounds(bounds);   
      map.panToBounds(bounds);  }
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
qualidat
Threadersteller

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Mo 08.06.2015 16:12
Titel

Antworten mit Zitat Zum Seitenanfang

Ich habe das mal wie folgt ergänzt. Das bewirkt aber, dass das Infofenster sich zwar öffnet, aber immer nur bei einem Marker, egal, welchen man anklickt. Die Variablen marker und infowin als Array zu führen, habe ich auch probiert, hat aber auch nicht funktiniert ... *Schnief*
Code:

function initialize(count) {
         
      var mapOptions = {zoom: 4};   
      var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
         
      for (var i=0; i<count; i++)   {   
   
      var infowin = new google.maps.InfoWindow({content:'bla test'});   //<= hier
      var  marker = new google.maps.Marker({       
            position: new google.maps.LatLng(locations[i][1],locations[i][2]),       
            map:map,       
            labelContent: locations[i][0],   
                                title: locations[i][0],   
            icon: pin_sym(locations[i][3],locations[i][4])});       
           
     google.maps.event.addListener(marker,'click',function(){infowin.open(map,marker);});  //<= hier
     bounds.extend(new google.maps.LatLng(locations[i][1],locations[i][2]));   }     
           
      map.fitBounds(bounds);   
      map.panToBounds(bounds);  }


Zuletzt bearbeitet von qualidat am Mo 08.06.2015 16:13, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
JohnnyCage
Gesperrt

Dabei seit: 11.12.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 08.06.2015 18:10
Titel

Antworten mit Zitat Zum Seitenanfang

infowin im event ist eine Referenz auf die infowin-Variable die zum Zeitpunkt des Klickens den Wert aus der letzten Iteration hat.

Versuch es anstelle von var infowin = und infowin.open(map… mit marker.infowin = und marker.infowin.open(map…
  View user's profile Private Nachricht senden
JohnnyCage
Gesperrt

Dabei seit: 11.12.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 08.06.2015 20:42
Titel

Antworten mit Zitat Zum Seitenanfang

Edit: marker innerhalb des events wird vermutlich mit this referenziert.
  View user's profile Private Nachricht senden
JohnnyCage
Gesperrt

Dabei seit: 11.12.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Di 09.06.2015 11:34
Titel

Antworten mit Zitat Zum Seitenanfang

Schon gut. Nichts zu danken. Habe ich gerne gemacht.
  View user's profile Private Nachricht senden
qualidat
Threadersteller

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Di 09.06.2015 12:14
Titel

Antworten mit Zitat Zum Seitenanfang

JohnnyCage hat geschrieben:
Schon gut. Nichts zu danken. Habe ich gerne gemacht.


bin z.Zt. unterwegs, noch nicht zum Testen gekommen ... gegen 17/18 Uhr vlt.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
qualidat
Threadersteller

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Di 09.06.2015 22:18
Titel

Antworten mit Zitat Zum Seitenanfang

Danke der Mühe, geht!

Hättest du noch einen Vorschlag, wie man alle offenen Infofenster schließt, bevor sich ein neues öffnet? Jeder Klick öffnet nun ein neues Fenster, schließen muss man sie derzeit manuell.

Code:
function initialize(count) {
         
      var mapOptions = {zoom: 4};   
      var map=new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
                               
         
      for (var i=0; i<count; i++)   {       
             
      var   marker=new google.maps.Marker({       
            position: new google.maps.LatLng(locations[i][1],locations[i][2]),       
            map:map,       
            labelContent: locations[i][0],   
                                title: locations[i][0],   
            icon: pin_sym(locations[i][3],locations[i][4])});       

                marker.infowin=new google.maps.InfoWindow({content:'bla bla blub. '+i});                 
                google.maps.event.addListener(marker,'click',function(){this.infowin.open(map,this);});

                bounds.extend(new google.maps.LatLng(locations[i][1],locations[i][2]));   }           

      map.fitBounds(bounds);   
      map.panToBounds(bounds);  }


Zuletzt bearbeitet von qualidat am Di 09.06.2015 22:25, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
JohnnyCage
Gesperrt

Dabei seit: 11.12.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Di 09.06.2015 23:47
Titel

Antworten mit Zitat Zum Seitenanfang

Das müsste funktionieren.

Code:


function initialize(count) {
      var openInfoWin = null;
     
      [...]
               
                google.maps.event.addListener(marker,'click',function(){
                         if(openInfoWin){
                                  openInfoWin.schließenFunktionDerGoogleMapsApi();
                         }
                         openInfoWin = this.infowin;
                         this.infowin.open(map,this);
                });

      [...]


Also, eine Variable in der outter-function definieren der dann beim Klick die entsprechende, sich öffnende infowin zuweist und beim nächsten Klick dann wieder abrufen und schließen kannst.
  View user's profile Private Nachricht senden
 
Ähnliche Themen google maps api und eigener marker
Google Maps Map-Marker verwenden
Google Maps: Mehrere Marker per URL-Aufruf?
Google Kontakte auf Google Maps auslesen/anzeigen lassen
Google Maps und Google Places
Google Maps API
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.