סמנים

בחירת פלטפורמה: Android iOS JavaScript

מבוא

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

באופן כללי, סמנים הם סוג של שכבת-על. למידע נוסף על סוגים אחרים של שכבת-על, ראו את המאמר שרטוט במפה.

הסמנים נועדו להיות אינטראקטיביים. לדוגמה, כברירת מחדל הם מקבלים אירועי 'click', כך שאפשר להוסיף event listener כדי להציג חלון מידע שמציג מידע בהתאמה אישית. אפשר לאפשר למשתמשים להזיז סמן במפה על ידי הגדרת המאפיין draggable של הסמן כ- true. למידע נוסף על סמנים שניתנים לגרירה, אפשר לעיין בהמשך.

הוספת סמן

ה-constructor google.maps.Marker משתמש בליטרל של אובייקט Marker options יחיד, כדי לציין את המאפיינים הראשוניים של הסמן.

השדות הבאים חשובים במיוחד ומוגדרים בדרך כלל כשיוצרים סמן:

  • position (חובה) מציין LatLng שמזהה את המיקום הראשוני של הסמן. אחת הדרכים לאחזור LatLng היא באמצעות שירות הקידוד הגיאוגרפי.
  • map (אופציונלי) מציין את Map שבו מציבים את הסמן. אם לא מציינים את המפה בזמן בניית הסמן, הסמן נוצר אבל לא מוצמד למפה (או מוצג בה). אפשר להוסיף את הסמן מאוחר יותר על ידי קריאה לשיטה setMap() של הסמן.

בדוגמה הבאה מוסיפים סמן פשוט למפה באולורו שבמרכז אוסטרליה:

TypeScript

function initMap(): void {
  const myLatLng = { lat: -25.363, lng: 131.044 };

  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: myLatLng,
    }
  );

  new google.maps.Marker({
    position: myLatLng,
    map,
    title: "Hello World!",
  });
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const myLatLng = { lat: -25.363, lng: 131.044 };
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: myLatLng,
  });

  new google.maps.Marker({
    position: myLatLng,
    map,
    title: "Hello World!",
  });
}

window.initMap = initMap;
להצגת דוגמה

רוצה לנסות את הדוגמה

בדוגמה שלמעלה, הסמן ממוקם במפה בזמן יצירת הסמן באמצעות המאפיין map באפשרויות הסמן. לחלופין, אפשר להוסיף את הסמן ישירות למפה באמצעות השיטה setMap() של הסמן, כפי שמוצג בדוגמה הבאה:

var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var mapOptions = {
  zoom: 4,
  center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"), mapOptions);

var marker = new google.maps.Marker({
    position: myLatlng,
    title:"Hello World!"
});

// To add the marker to the map, call setMap();
marker.setMap(map);

The marker's title will appear as a tooltip.

If you do not wish to pass any Marker options in the marker's constructor, instead pass an empty object {} in the last argument of the constructor.

View example

Remove a marker

To remove a marker from the map, call the setMap() method passing null as the argument.

marker.setMap(null);

Note that the above method does not delete the marker. It removes the marker from the map. If instead you wish to delete the marker, you should remove it from the map, and then set the marker itself to null.

If you wish to manage a set of markers, you should create an array to hold the markers. Using this array, you can then call setMap() on each marker in the array in turn when you need to remove the markers. You can delete the markers by removing them from the map and then setting the array's length to 0, which removes all references to the markers.

View example

Customize a marker image

You can customize the visual appearance of markers by specifying an image file or vector-based icon to display instead of the default Google Maps pushpin icon. You can add text with a marker label, and use complex icons to define clickable regions, and set the stack order of markers.

Markers with image icons

In the most basic case, an icon can specify an image to use instead of the default Google Maps pushpin icon. To specify such an icon, set the marker's icon property to the URL of an image. The Maps JavaScript API will size the icon automatically.

TypeScript

// This example adds a marker to indicate the position of Bondi Beach in Sydney,
// Australia.
function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 4,
      center: { lat: -33, lng: 151 },
    }
  );

  const image =
    "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png";
  const beachMarker = new google.maps.Marker({
    position: { lat: -33.89, lng: 151.274 },
    map,
    icon: image,
  });
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// This example adds a marker to indicate the position of Bondi Beach in Sydney,
// Australia.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 4,
    center: { lat: -33, lng: 151 },
  });
  const image =
    "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png";
  const beachMarker = new google.maps.Marker({
    position: { lat: -33.89, lng: 151.274 },
    map,
    icon: image,
  });
}

window.initMap = initMap;
להצגת דוגמה

רוצה לנסות את הדוגמה

סמנים עם סמלים מבוססי-וקטורים

אפשר להשתמש בנתיבים וקטוריים של SVG בהתאמה אישית כדי להגדיר את המראה החזותי של הסמנים. כדי לעשות זאת, מעבירים ליטרל של אובייקט Symbol עם הנתיב הרצוי למאפיין icon של הסמן. אפשר להגדיר נתיב בהתאמה אישית באמצעות סימון נתיב מסוג SVG או להשתמש באחד מהנתיבים המוגדרים מראש ב-google.maps.SymbolPath. המאפיין anchor נדרש כדי שהסמן יוצג כראוי כשרמת הזום תשתנה. מידע נוסף על השימוש בסמלים ליצירת סמלים מבוססי-וקטורים לסמנים (ולקווים פוליגוניים).

TypeScript

// This example uses SVG path notation to add a vector-based symbol
// as the icon for a marker. The resulting icon is a marker-shaped
// symbol with a blue fill and no border.

function initMap(): void {
  const center = new google.maps.LatLng(-33.712451, 150.311823);
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 9,
      center: center,
    }
  );

  const svgMarker = {
    path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z",
    fillColor: "blue",
    fillOpacity: 0.6,
    strokeWeight: 0,
    rotation: 0,
    scale: 2,
    anchor: new google.maps.Point(0, 20),
  };

  new google.maps.Marker({
    position: map.getCenter(),
    icon: svgMarker,
    map: map,
  });
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// This example uses SVG path notation to add a vector-based symbol
// as the icon for a marker. The resulting icon is a marker-shaped
// symbol with a blue fill and no border.
function initMap() {
  const center = new google.maps.LatLng(-33.712451, 150.311823);
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 9,
    center: center,
  });
  const svgMarker = {
    path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z",
    fillColor: "blue",
    fillOpacity: 0.6,
    strokeWeight: 0,
    rotation: 0,
    scale: 2,
    anchor: new google.maps.Point(0, 20),
  };

  new google.maps.Marker({
    position: map.getCenter(),
    icon: svgMarker,
    map: map,
  });
}

window.initMap = initMap;
להצגת דוגמה

רוצה לנסות את הדוגמה

תוויות של סמנים

תווית של סמן היא אות או מספר שמופיעים בתוך סמן. תמונת הסמן בקטע הזה מציגה תווית סימון עם האות 'B' עליה. אפשר לציין תווית של סמן כמחרוזת או כאובייקט MarkerLabel, שכולל מחרוזת ומאפייני תווית אחרים.

כשיוצרים סמן, אפשר לציין מאפיין label באובייקט MarkerOptions. לחלופין, אפשר לקרוא לפונקציה setLabel() באובייקט Marker כדי להגדיר את התווית בסמן קיים.

הדוגמה הבאה מציגה סמנים מתויגים כשהמשתמש לוחץ על המפה:

TypeScript

// In the following example, markers appear when the user clicks on the map.
// Each marker is labeled with a single alphabetical character.
const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let labelIndex = 0;

function initMap(): void {
  const bangalore = { lat: 12.97, lng: 77.59 };
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 12,
      center: bangalore,
    }
  );

  // This event listener calls addMarker() when the map is clicked.
  google.maps.event.addListener(map, "click", (event) => {
    addMarker(event.latLng, map);
  });

  // Add a marker at the center of the map.
  addMarker(bangalore, map);
}

// Adds a marker to the map.
function addMarker(location: google.maps.LatLngLiteral, map: google.maps.Map) {
  // Add the marker at the clicked location, and add the next-available label
  // from the array of alphabetical characters.
  new google.maps.Marker({
    position: location,
    label: labels[labelIndex++ % labels.length],
    map: map,
  });
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// In the following example, markers appear when the user clicks on the map.
// Each marker is labeled with a single alphabetical character.
const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let labelIndex = 0;

function initMap() {
  const bangalore = { lat: 12.97, lng: 77.59 };
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: bangalore,
  });

  // This event listener calls addMarker() when the map is clicked.
  google.maps.event.addListener(map, "click", (event) => {
    addMarker(event.latLng, map);
  });
  // Add a marker at the center of the map.
  addMarker(bangalore, map);
}

// Adds a marker to the map.
function addMarker(location, map) {
  // Add the marker at the clicked location, and add the next-available label
  // from the array of alphabetical characters.
  new google.maps.Marker({
    position: location,
    label: labels[labelIndex++ % labels.length],
    map: map,
  });
}

window.initMap = initMap;
להצגת דוגמה

רוצה לנסות את הדוגמה

סמלים מורכבים

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

Icon אובייקטים מגדירים תמונה. הן מגדירות גם את size של הסמל, origin של הסמל (למשל, אם התמונה הרצויה היא חלק מתמונה גדולה יותר ב-Sprite) ואת anchor המיקום של הנקודה לשיתוף אינטרנט של הסמל (בהתאם למקור).

אם משתמשים בתווית עם סמן מותאם אישית, אפשר למקם את התווית עם המאפיין labelOrigin באובייקט Icon.

TypeScript

// The following example creates complex markers to indicate beaches near
// Sydney, NSW, Australia. Note that the anchor is set to (0,32) to correspond
// to the base of the flagpole.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 10,
      center: { lat: -33.9, lng: 151.2 },
    }
  );

  setMarkers(map);
}

// Data for the markers consisting of a name, a LatLng and a zIndex for the
// order in which these markers should display on top of each other.
const beaches: [string, number, number, number][] = [
  ["Bondi Beach", -33.890542, 151.274856, 4],
  ["Coogee Beach", -33.923036, 151.259052, 5],
  ["Cronulla Beach", -34.028249, 151.157507, 3],
  ["Manly Beach", -33.80010128657071, 151.28747820854187, 2],
  ["Maroubra Beach", -33.950198, 151.259302, 1],
];

function setMarkers(map: google.maps.Map) {
  // Adds markers to the map.

  // Marker sizes are expressed as a Size of X,Y where the origin of the image
  // (0,0) is located in the top left of the image.

  // Origins, anchor positions and coordinates of the marker increase in the X
  // direction to the right and in the Y direction down.
  const image = {
    url: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",
    // This marker is 20 pixels wide by 32 pixels high.
    size: new google.maps.Size(20, 32),
    // The origin for this image is (0, 0).
    origin: new google.maps.Point(0, 0),
    // The anchor for this image is the base of the flagpole at (0, 32).
    anchor: new google.maps.Point(0, 32),
  };
  // Shapes define the clickable region of the icon. The type defines an HTML
  // <area> element 'poly' which traces out a polygon as a series of X,Y points.
  // The final coordinate closes the poly by connecting to the first coordinate.
  const shape = {
    coords: [1, 1, 1, 20, 18, 20, 18, 1],
    type: "poly",
  };

  for (let i = 0; i < beaches.length; i++) {
    const beach = beaches[i];

    new google.maps.Marker({
      position: { lat: beach[1], lng: beach[2] },
      map,
      icon: image,
      shape: shape,
      title: beach[0],
      zIndex: beach[3],
    });
  }
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// The following example creates complex markers to indicate beaches near
// Sydney, NSW, Australia. Note that the anchor is set to (0,32) to correspond
// to the base of the flagpole.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 10,
    center: { lat: -33.9, lng: 151.2 },
  });

  setMarkers(map);
}

// Data for the markers consisting of a name, a LatLng and a zIndex for the
// order in which these markers should display on top of each other.
const beaches = [
  ["Bondi Beach", -33.890542, 151.274856, 4],
  ["Coogee Beach", -33.923036, 151.259052, 5],
  ["Cronulla Beach", -34.028249, 151.157507, 3],
  ["Manly Beach", -33.80010128657071, 151.28747820854187, 2],
  ["Maroubra Beach", -33.950198, 151.259302, 1],
];

function setMarkers(map) {
  // Adds markers to the map.
  // Marker sizes are expressed as a Size of X,Y where the origin of the image
  // (0,0) is located in the top left of the image.
  // Origins, anchor positions and coordinates of the marker increase in the X
  // direction to the right and in the Y direction down.
  const image = {
    url: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",
    // This marker is 20 pixels wide by 32 pixels high.
    size: new google.maps.Size(20, 32),
    // The origin for this image is (0, 0).
    origin: new google.maps.Point(0, 0),
    // The anchor for this image is the base of the flagpole at (0, 32).
    anchor: new google.maps.Point(0, 32),
  };
  // Shapes define the clickable region of the icon. The type defines an HTML
  // <area> element 'poly' which traces out a polygon as a series of X,Y points.
  // The final coordinate closes the poly by connecting to the first coordinate.
  const shape = {
    coords: [1, 1, 1, 20, 18, 20, 18, 1],
    type: "poly",
  };

  for (let i = 0; i < beaches.length; i++) {
    const beach = beaches[i];

    new google.maps.Marker({
      position: { lat: beach[1], lng: beach[2] },
      map,
      icon: image,
      shape: shape,
      title: beach[0],
      zIndex: beach[3],
    });
  }
}

window.initMap = initMap;
להצגת דוגמה

רוצה לנסות את הדוגמה

MarkerImage אובייקטים מומרים לסוג Icon

עד גרסה 3.10 של Maps JavaScript API, סמלים מורכבים הוגדרו כאובייקטים MarkerImage. ליטרל האובייקט Icon נוסף בגרסה 3.10 ומחליף את MarkerImage מגרסה 3.11 ואילך. ליטרלים של אובייקטים Icon תומכים באותם פרמטרים כמו MarkerImage, וכך אפשר להמיר בקלות MarkerImage ל-Icon על ידי הסרת הבנאי, גלישת הפרמטרים הקודמים ב-{} והוספת השמות של כל פרמטר. למשל:

var image = new google.maps.MarkerImage(
    place.icon,
    new google.maps.Size(71, 71),
    new google.maps.Point(0, 0),
    new google.maps.Point(17, 34),
    new google.maps.Size(25, 25));

becomes

var image = {
  url: place.icon,
  size: new google.maps.Size(71, 71),
  origin: new google.maps.Point(0, 0),
  anchor: new google.maps.Point(17, 34),
  scaledSize: new google.maps.Size(25, 25)
};

Optimize markers

Optimization enhances performance by rendering many markers as a single static element. This is useful in cases where a large number of markers is required. By default, the Maps JavaScript API will decide whether a marker will be optimized. When there is a large number of markers, the Maps JavaScript API will attempt to render markers with optimization. Not all Markers can be optimized; in some situations, the Maps JavaScript API may need to render Markers without optimization. Disable optimized rendering for animated GIFs or PNGs, or when each marker must be rendered as a separate DOM element. The following example shows creating an optimized marker:

var marker = new google.maps.Marker({
    position: myLatlng,
    title:"Hello World!",
    optimized: true 
});

הפיכת הסמן לנגיש

אפשר להפוך סמן לנגיש. לשם כך, צריך להוסיף אירוע של האזנה לקליקים, ולהגדיר את optimized לערך false. הכלי מאזין לקליקים גורם לסמן יש סמנטיקה של לחצנים, שניתן לגשת אליה באמצעות ניווט באמצעות המקלדת, קוראי מסך וכו'. אפשר להשתמש באפשרות title כדי להציג טקסט נגיש לסמן.

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

TypeScript

// The following example creates five accessible and
// focusable markers.

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 12,
      center: { lat: 34.84555, lng: -111.8035 },
    }
  );

  // Set LatLng and title text for the markers. The first marker (Boynton Pass)
  // receives the initial focus when tab is pressed. Use arrow keys to
  // move between markers; press tab again to cycle through the map controls.
  const tourStops: [google.maps.LatLngLiteral, string][] = [
    [{ lat: 34.8791806, lng: -111.8265049 }, "Boynton Pass"],
    [{ lat: 34.8559195, lng: -111.7988186 }, "Airport Mesa"],
    [{ lat: 34.832149, lng: -111.7695277 }, "Chapel of the Holy Cross"],
    [{ lat: 34.823736, lng: -111.8001857 }, "Red Rock Crossing"],
    [{ lat: 34.800326, lng: -111.7665047 }, "Bell Rock"],
  ];

  // Create an info window to share between markers.
  const infoWindow = new google.maps.InfoWindow();

  // Create the markers.
  tourStops.forEach(([position, title], i) => {
    const marker = new google.maps.Marker({
      position,
      map,
      title: `${i + 1}. ${title}`,
      label: `${i + 1}`,
      optimized: false,
    });

    // Add a click listener for each marker, and set up the info window.
    marker.addListener("click", () => {
      infoWindow.close();
      infoWindow.setContent(marker.getTitle());
      infoWindow.open(marker.getMap(), marker);
    });
  });
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// The following example creates five accessible and
// focusable markers.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 12,
    center: { lat: 34.84555, lng: -111.8035 },
  });
  // Set LatLng and title text for the markers. The first marker (Boynton Pass)
  // receives the initial focus when tab is pressed. Use arrow keys to
  // move between markers; press tab again to cycle through the map controls.
  const tourStops = [
    [{ lat: 34.8791806, lng: -111.8265049 }, "Boynton Pass"],
    [{ lat: 34.8559195, lng: -111.7988186 }, "Airport Mesa"],
    [{ lat: 34.832149, lng: -111.7695277 }, "Chapel of the Holy Cross"],
    [{ lat: 34.823736, lng: -111.8001857 }, "Red Rock Crossing"],
    [{ lat: 34.800326, lng: -111.7665047 }, "Bell Rock"],
  ];
  // Create an info window to share between markers.
  const infoWindow = new google.maps.InfoWindow();

  // Create the markers.
  tourStops.forEach(([position, title], i) => {
    const marker = new google.maps.Marker({
      position,
      map,
      title: `${i + 1}. ${title}`,
      label: `${i + 1}`,
      optimized: false,
    });

    // Add a click listener for each marker, and set up the info window.
    marker.addListener("click", () => {
      infoWindow.close();
      infoWindow.setContent(marker.getTitle());
      infoWindow.open(marker.getMap(), marker);
    });
  });
}

window.initMap = initMap;
להצגת דוגמה

רוצה לנסות את הדוגמה

הנפשה של סמן

אפשר להוסיף אנימציה לסמנים כדי להציג תנועה דינמית במגוון נסיבות. כדי לציין את אופן האנימציה של סמן, צריך להשתמש במאפיין animation של הסמן, מסוג google.maps.Animation. המערכת תומכת בערכים הבאים של Animation:

  • DROP מציין שהסמן צריך לרדת מהחלק העליון של המפה למיקום הסופי שלו בפעם הראשונה שמוצב במפה. האנימציה תופסק כשהסמן יגיע למצב מנוחה, והערך animation יחזור לערך null. סוג האנימציה הזה מצוין בדרך כלל במהלך היצירה של Marker.
  • BOUNCE מציין שהסמן צריך לקפוץ למקומו. סמן שחוזר על עצמו ימשיך לקפוץ עד שמאפיין animation שלו יוגדר באופן מפורש כ-null.

אפשר ליזום אנימציה בסמן קיים על ידי קריאה ל-setAnimation() באובייקט Marker.

TypeScript

// The following example creates a marker in Stockholm, Sweden using a DROP
// animation. Clicking on the marker will toggle the animation between a BOUNCE
// animation and no animation.

let marker: google.maps.Marker;

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 13,
      center: { lat: 59.325, lng: 18.07 },
    }
  );

  marker = new google.maps.Marker({
    map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: { lat: 59.327, lng: 18.067 },
  });
  marker.addListener("click", toggleBounce);
}

function toggleBounce() {
  if (marker.getAnimation() !== null) {
    marker.setAnimation(null);
  } else {
    marker.setAnimation(google.maps.Animation.BOUNCE);
  }
}

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

// The following example creates a marker in Stockholm, Sweden using a DROP
// animation. Clicking on the marker will toggle the animation between a BOUNCE
// animation and no animation.
let marker;

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 13,
    center: { lat: 59.325, lng: 18.07 },
  });

  marker = new google.maps.Marker({
    map,
    draggable: true,
    animation: google.maps.Animation.DROP,
    position: { lat: 59.327, lng: 18.067 },
  });
  marker.addListener("click", toggleBounce);
}

function toggleBounce() {
  if (marker.getAnimation() !== null) {
    marker.setAnimation(null);
  } else {
    marker.setAnimation(google.maps.Animation.BOUNCE);
  }
}

window.initMap = initMap;
להצגת דוגמה

רוצה לנסות את הדוגמה

אם יש לך סמנים רבים, לא מומלץ לשחרר אותם במפה בבת אחת. אפשר להשתמש ב-setTimeout() כדי הרווח את האנימציות של הסמנים באמצעות דפוס כמו בדוגמה הבאה:

function drop() {
  for (var i =0; i < markerArray.length; i++) {
    setTimeout(function() {
      addMarkerMethod();
    }, i * 200);
  }
}

להצגת דוגמה

הפיכת סמן לניתן לגרירה

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

var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var mapOptions = {
  zoom: 4,
  center: myLatlng
}
var map = new google.maps.Map(document.getElementById("map"), mapOptions);

// Place a draggable marker on the map
var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    draggable:true,
    title:"Drag me!"
});

התאמה אישית נוספת של הסמן

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

למידע נוסף על תוספים של מחלקה של הסמן, קיבוץ סמנים וניהול שלהם, והתאמה אישית של שכבות-על, ראו ספריות קוד פתוח.