חלונות קופצים

popover מציג תוכן (בדרך כלל טקסט או תמונות) בחלון דו-שיח מעל המפה, במיקום נתון. בחלון הקופץ יש אזור תוכן וגוף צר. קצה הגבעול מחובר למיקום מסוים במפה. חלונות קופצים מופיעים כתיבת תיבת דו-שיח לקוראי מסך.

בדרך כלל מחברים חלון קופץ לסימן אינטראקטיבי, אבל אפשר גם לצרף חלון קופץ לקואורדינטה LatLngAltitude ספציפית או להזיז אותו ביחס לסמן.

הוספת חלון קופץ

למסוף PopoverElement מוגדר ליטרל אובייקט של PopoverElementOptions, שמציין את הפרמטרים הראשוניים להצגת חלון הקופץ.

המילולית של האובייקט PopoverElementOptions מכילה את השדות הבאים:

  • positionAnchor: המיקום LatLngAltitude שבו יוצג הסמן. אם משתמשים בסמן, המערכת תשתמש במיקום הסמן במקום זאת.
  • altitudeMode: האופן שבו מתפרש הגובה של חלון הקופץ.
  • lightDismissDisabled: קובע אם חלון הקופץ יישאר פתוח כשהמשתמש לוחץ מחוץ אליו או מקשקש על מקש Esc. כשהאפשרות הזו מוגדרת לערך true, אפשר להציג במפה כמה חלונות קופצים של lightDismissDisabled בו-זמנית.
  • open: קובע אם חלון הקופץ צריך להיות פתוח או לא. ברירת המחדל היא false.

התוכן של PopoverElement יכול להכיל מחרוזת טקסט, קטע HTML או רכיב DOM. כדי להגדיר את התוכן, צריך לצרף אותו ל-PopoverElement באופן מפורש בחריץ header או default.

אם רוצים לקבוע את הגודל של התוכן באופן מפורש, אפשר להוסיף אותו לרכיב <div> ולקבוע את הסגנון של <div> באמצעות CSS. חלונות קופצים ניתנים לגלילה כברירת מחדל, ויש להם גובה מוגדר מראש.

עיגון חלון קופץ לקואורדינטה LatLngAltitude

כשיוצרים חלון קופץ, הוא לא מוצג באופן אוטומטי במפה. כדי שהחלון הקופץ יוצג, צריך להגדיר את האפשרות open לערך true בקטע PopoverElement. אפשר לבצע את הפעולה הזו במהלך היצירה או אחרי היצירה.

async function init() {
    const { AltitudeMode, Map3DElement, MapMode, PopoverElement } = await google.maps.importLibrary("maps3d");
    const map = new Map3DElement({
        center: { lat: 37.8204, lng: -122.4783, altitude: 0.407 }, range: 4000, tilt: 74, heading: 38,
        mode: MapMode.HYBRID,
    });
    const popover = new PopoverElement({
        altitudeMode: AltitudeMode.ABSOLUTE,
        open: true,
        positionAnchor: { lat: 37.819852, lng: -122.478549, altitude: 150 },
    });
    popover.append('Golden Gate Bridge');
    map.append(popover);
    document.body.append(map);
}
init();

הצמדת חלון קופץ לסמן

אפשר לקשר חלונות קופצים למסמנים. כשמוסיפים חלון קופץ שמקובע לסמן, מגדירים את האפשרות PopoverElement.positionAnchor כדי להשתמש בסמן.

async function init() {
    const { AltitudeMode, Map3DElement, Marker3DInteractiveElement, MapMode, PopoverElement } = await google.maps.importLibrary("maps3d");
    const map = new Map3DElement({
        center: { lat: 37.8204, lng: -122.4783, altitude: 0.407 }, range: 4000, tilt: 74, heading: 38,
        mode: MapMode.HYBRID,
    });
    // Popovers can only be added to interactive Markers
    const interactiveMarker = new Marker3DInteractiveElement({
        altitudeMode: AltitudeMode.ABSOLUTE,
        position: { lat: 37.819852, lng: -122.478549, altitude: 100 }
    });
    const popover = new PopoverElement({
        open: false,
        positionAnchor: interactiveMarker,
    });
    popover.append('Golden Gate Bridge');
    interactiveMarker.addEventListener('gmp-click', (event) => {
        // toggle the marker to the other state (unlee you are clicking on the marker itself when it reopens it)
        popover.open = !popover.open;
    });
    map.append(interactiveMarker);
    map.append(popover);
    document.body.append(map);
}
init();

איך מחברים חלון קופץ לסמן באמצעות HTML

אפשר גם לקשר חלונות קופצים לסימנים בלי לכתוב קוד JavaScript, כפי שמתואר בהמשך:

<gmp-map-3d mode="hybrid" center="37.819852,-122.478549" tilt="75" range="2000" heading="330">
  <gmp-marker-3d-interactive gmp-popover-target="my-popover" position="37.819852,-122.478549,100"></gmp-marker-3d-interactive>
  <gmp-popover id="my-popover">
    Golden Gate Bridge
  </gmp-popover>
</gmp-map-3d>
<script async src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDGl0teQ6qwaBEdHazOWIEXd8XGWOZvoaM&v=beta&libraries=maps3d">
</script>

הוספת תוכן מותאם אישית לחלון קופץ

אפשר להוסיף תוכן מותאם אישית לחלונות קופצים על ידי הגדרת האפשרויות header ו-content:

async function init() {
  const {Map3DElement, MapMode, PopoverElement, AltitudeMode} = await google.maps.importLibrary('maps3d');

  const map = new Map3DElement({
    center: { lat: 37.819852, lng: -122.478549, altitude: 2000 },
    tilt: 75,
    heading: 330,
    mode: MapMode.SATELLITE,
  });

  const popover = new PopoverElement({
    altitudeMode: AltitudeMode.ABSOLUTE,
    open: true,
    positionAnchor: {lat: 37.819852, lng: -122.478549, altitude: 100},
  });

  const header = document.createElement('div');
  header.style.fontWeight = 'bold';
  header.slot = 'header';
  header.textContent = 'Golden Gate Bridge';
  const content = document.createElement('div');
  content.textContent = 'Iconic orange bridge connecting San Francisco to Marin.';

  popover.append(header);
  popover.append(content);

  document.body.append(map);
  map.append(popover);
}

init();