x

Popups automatisch schließen bei neuem Popup


  1. Popups automatisch schließen bei neuem Popup · chricken (Gast) · 10.06.2013 13:03 · [flux]

    Hallo,
    ich stehe ein bisschen auf dem Schlauch.
    Habe auf der Arbeit ein OSM-Projekt vorgesetzt bekommen, das sich im Aufbau befindet.
    Das Problem ist, dass die Popups sich zwar öffnen.
    Aber wenn sich ein neuer Popup öffnet, dann bleiben die alten ebenfalls geöffnet.
    Allerdings sollen offene Popups geschlossen werden.

    Das ist mein Problem. Ich habe mich schon ein bisschen eingelesen, aber ich fürchte, ohne Hilfe komme ich nicht weiter.
    Wenn ich es richtig gesehen habe, dann kommt der mir vorgesetzte Code großenteils auch aus Anleitungen und Tutorials. Ich bin also guter Hoffnung, dass irgendwer den Code kennt.

    Aus dieser Anleitung: http://wiki.openstreetmap.org/wiki/Die_ … pt_Dateien wurde das tom.js eingebunden.

    Im HTML-Template wird dann im Javascript ein Array mit den Standort-Infos eingebunden (Code ist vereinfacht, da die genauen Koordinaten und Daten nichts zur Sache tun):

    var␣varParcs=[["8.858356","54.129056","Titel","ein␣paar␣Daten␣mehr"]["1,"2","Titel","ein␣paar␣Daten␣mehr"]["3","4","Titel","ein␣paar␣Daten␣mehr"]["5","6","Titel","ein␣paar␣Daten␣mehr"]];
    
    //Dann␣kommt␣der␣interessante␣Teil,␣auch␣hier␣werde␣ich␣vereinfachen,␣um␣die␣Hilfe␣zu␣erleichtern:
    OpenLayers.Lang.setCode('de');
    
    //␣Position␣und␣Zoomstufe␣der␣Karte
    var␣lon␣=␣10.426025;
    var␣lat␣=␣51.781436;
    var␣zoom␣=␣6;
    
    map␣=␣new␣OpenLayers.Map('map',␣{
    projection:␣new␣OpenLayers.Projection("EPSG:900913"),
    displayProjection:␣new␣OpenLayers.Projection("EPSG:4326"),
    controls:
    [
    new␣OpenLayers.Control.Navigation(),
    new␣OpenLayers.Control.LayerSwitcher(),
    new␣OpenLayers.Control.PanZoomBar()
    ],
    maxExtent:␣new␣OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,␣20037508.34),
    numZoomLevels:␣18,
    maxResolution:␣156543,
    units:␣'meters'
    });
    
    var␣mapnik␣=␣new␣OpenLayers.Layer.OSM();	//Kartenlayer␣erzeugen
    map.addLayer(mapnik);
    
    /*␣Es␣werden␣noch␣ein␣paar␣mehr␣Layers␣angelegt
    var␣layerParks␣=␣␣.......
    */
    
    jumpTo(lon,␣lat,␣zoom);
    
    //␣Die␣folgenden␣Variablen␣sind␣mir␣-␣bis␣auf␣die␣Icons␣-␣nicht␣ganz␣klar.␣Aber␣ich␣glaube␣nicht,␣dass␣die␣mit␣dem␣Schließen␣der␣Popups␣etwas␣zu␣tun␣haben.
    var␣size␣=␣new␣OpenLayers.Size(21,␣25);
    var␣sizeHaupt=␣new␣OpenLayers.Size(26,␣42);
    var␣sizeWind=␣new␣OpenLayers.Size(58,␣69);
    var␣sizeWald␣=␣new␣OpenLayers.Size(39,␣52);
    var␣sizeBeratung␣=␣new␣OpenLayers.Size(42,␣30);
    var␣sizeService␣=␣new␣OpenLayers.Size(43,␣40);
    var␣offset␣=␣new␣OpenLayers.Pixel(-(size.w/2),␣-size.h);
    var␣middleWind␣=␣new␣OpenLayers.Pixel(-(sizeWind.w/2),␣-sizeWind.h/2);
    var␣middleWald␣=␣new␣OpenLayers.Pixel(-(sizeWald.w/2),␣-sizeWald.h/2);
    var␣middleService␣=␣new␣OpenLayers.Pixel(-(sizeService.w/2),␣-sizeService.h/2);
    var␣middleBeratung␣=␣new␣OpenLayers.Pixel(-(sizeBeratung.w/2),␣-sizeBeratung.h/2);
    var␣icon␣=␣new␣OpenLayers.Icon('http://www.openstreetmap.org/openlayers/img/marker.png',size,offset);
    var␣iconHaupt␣=␣new␣OpenLayers.Icon('bilder/osm/thron.png',sizeHaupt,offset);
    var␣iconWind␣=␣new␣OpenLayers.Icon('bilder/osm/wind-orange.png',sizeWind,middleWind);
    var␣iconWald␣=␣new␣OpenLayers.Icon('bilder/osm/baum.png',sizeWald,middleWald);
    var␣iconBeratung␣=␣new␣OpenLayers.Icon('bilder/osm/telefon.png',sizeBeratung,middleBeratung);
    var␣iconService␣=␣new␣OpenLayers.Icon('bilder/osm/service.png',sizeService,middleService)
    
    /******************************/
    var␣x␣=␣0;
    var␣y␣=␣0;
    
    //␣Dann␣werden␣für␣jeden␣Eintrag␣im␣Array␣die␣Inhalte␣in␣eine␣vorläufige␣Variable␣geschrieben␣und␣in␣String␣umgewandelt,␣um␣beim␣addMarker␣darauf␣zuzugreifen
    
    for(var␣i␣=␣0;␣i␣<␣varParcs.length;␣i++)␣{
    x␣=␣varParcs[i][0];
    y␣=␣varParcs[i][1];
    y␣=␣parseFloat(y);
    x␣=␣parseFloat(x);
    
    var␣bez␣=␣varParcs[i][2];
    /*␣Noch␣einige␣Variablen␣mehr
    var␣typ␣=␣...
    ...
    */
    
    bez␣=␣String(bez);
    /*␣Noch␣einige␣Umwandlungen␣mehr
    typ␣=␣String(␣...
    ...
    */
    
    //␣Eigentlich␣findet␣der␣addMarker-Aufruf␣mithilfe␣viele␣if-Abfragen␣statt,␣um␣den␣Popup␣mit␣den␣richtigen␣Angaben␣auf␣das␣richtige␣Layer␣zu␣bekommen.
    //␣Statt␣dessen␣zeige␣ich␣einen␣beispielhaften␣Aufruf.
    addMarker(layerParks,␣x,␣y,␣"<b>Windpark<br>"␣+␣bez␣+␣"</b><br>Anlagentyp:␣"␣+␣typ␣+␣"<br>WEA-Anzahl:␣"+␣anz␣+␣"<br>Nennleistung:␣"␣+␣nen␣+␣"<p><img␣src=\"wind-farm.png\"></p>",␣iconWind.clone());
    }
    

    Ich hoffe, jemand kann mir helfen.
    Immerhin arbeiten fast alle OSM-Projekte, die ich gesehen habe, so wie ich es will 😉

    Lieben Gruß
    Chricken


    • Re: Popups automatisch schließen bei neuem Popup · wambacher (Gast) · 10.06.2013 13:17 · [flux]

      chricken wrote:

      Immerhin arbeiten fast alle OSM-Projekte, die ich gesehen habe, so wie ich es will 😉

      Obwohl ich mich deinem Willen nicht beugen werde, sollte es so gehen:

      function␣popupClear()␣{
      //alert('number␣of␣popups␣'+map.popups.length);
      while(␣map.popups.length␣)␣{
      map.removePopup(map.popups[0]);
      }
      }
      

      und dann irgendwo "popupClear();" aufrufen. Z.B vor dem neuen Popup.

      Gruss
      walter


    • Re: Popups automatisch schließen bei neuem Popup · Oranger Assistent (Gast) · 10.06.2013 14:17 · [flux]

      Tach.

      chricken wrote:

      Das Problem ist, dass die Popups sich zwar öffnen.
      Aber wenn sich ein neuer Popup öffnet, dann bleiben die alten ebenfalls geöffnet.
      Allerdings sollen offene Popups geschlossen werden.

      Leider hast Du Dein Script sehr unvollständig gepostet. Ideal für eine Fehlersuche wäre eine abrufbare Seite im Netz.

      Also: wenn Dein Script irgendwo ein:

      map.addPopup(x)
      

      enthält, mach daraus ein

      map.addPopup(x,␣true)
      

      Das zweite Argument wählt, ob andere Popups geschlossen werden sollen. Default: null→false→ nein.

      Orange Grüße
      Der Assistent


    • Re: Popups automatisch schließen bei neuem Popup · wambacher (Gast) · 10.06.2013 15:45 · [flux]

      Oranger Assistent wrote:

      Das zweite Argument wählt, ob andere Popups geschlossen werden sollen. Default: null→false→ nein.

      Besserwisser Spielverderber 😉

      Gruss
      walter

      p.s. manchmal denke ich zu sehr "um die Ecke" und da finde ich 'ne Lösung, die ich vor Jahren mal verwendet habe 🙁


    • Re: Popups automatisch schließen bei neuem Popup · chricken (Gast) · 12.06.2013 12:08 · [flux]

      Hallo,

      vielen Dank für die schnelle und kompetente Hilfe.
      Das Argument im addPopup war die Lösung.
      Jetzt funktioniert es wie es soll.

      Falls Ihr es noch immer einsehen wollt:
      Ich will keine unfertigen Projekte posten.
      Aber es ist für die Webseite von Prokon.net.
      Wenn der Relaunch vollzogen ist, dann könnt Ihr dort die Karte einsehen.
      Ich will noch schauen, dass die Karten auf dem eigenen Server gehostet werden. Wir wollen das freie Projekt ja nicht unnötig belasten.

      Lieben Gruß
      Christian


    • Re: Popups automatisch schließen bei neuem Popup · Oranger Assistent (Gast) · 12.06.2013 12:45 · [flux]

      Tach.

      chricken wrote:

      Falls Ihr es noch immer einsehen wollt:
      Ich will keine unfertigen Projekte posten.

      Es geht nicht um “das Projekt einsehen”.

      Sondern Fehler können sich an den unmöglichsten Stellen verstecken, die Du nicht verdächtigst und auch nicht verdächtigen kannst. Es ist wirklich ärgerlich, wenn man an völlig falschen Stellen blind herumstochert oder herumgestochert hat, während man im Source oder auf der Fehlerkonsole oder im Firebug den Fehler sofort sehen könnte.

      Die defekte Seite mit Blinddaten bereitzustellen ist ein kleines Entgegenkommen denen gegenüber, die hier für lau Fehler suchen und Fixes anbieten. Das gilt nicht speziell für Dich, sondern für alle, die um Hilfe bitten.

      Orange Grüße
      Der Assistent.