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

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

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

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

ה-constructor של 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 { Map3DElement, 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: 'HYBRID',
    });

    const popover = new PopoverElement({
        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);
}

void init();

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

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

async function init() {
    const { Map3DElement, Marker3DInteractiveElement, 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: 'HYBRID',
    });

    // Popovers can only be added to interactive Markers
    const interactiveMarker = new Marker3DInteractiveElement({
        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', () => {
        // 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);
}

void 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();