סמנים (מדור קודם)

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

מבוא

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

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

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

הוסף סמן

google.maps.Marker constructor לוקח אובייקט 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);

title של הסמן יופיע כהסבר קצר.

אם אינך רוצה להעביר Marker options ב את ה-constructor של הסמן, ומעבירים אובייקט ריק {} הארגומנט האחרון של ה-constructor.

להצגת דוגמה

הסרת סמן

כדי להסיר סמן מהמפה, יש להפעיל את השיטה setMap() העברת null כארגומנט.

marker.setMap(null);

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

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

להצגת דוגמה

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

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

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

במקרה הבסיסי ביותר, סמל יכול לציין תמונה לשימוש במקום סמל הסיכה של מפות Google שמוגדר כברירת מחדל. כדי לציין סמל כזה, מגדירים את מאפיין icon של הסמן לכתובת ה-URL של תמונה. ממשק JavaScript API של מפות Google ישנה את הסמל באופן אוטומטי.

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() סמן כדי להגדיר את התווית על סמן קיים.

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

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 שבו נמצאת הנקודה לשיתוף אינטרנט (Hotspot) של הסמל (כלומר בהתאם למקור).

אם אתם משתמשים בתווית עם מאפיין סמן, ניתן למקם את התווית עם נכס 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 על ידי הסרת המאפיין constructor, כולל את הפרמטרים הקודמים של {}, להוסיף את השמות של כל הפרמטרים. לדוגמה:

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

הופך ל-

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)
};

אופטימיזציה של סמנים

האופטימיזציה משפרת את הביצועים על ידי הצגת סמנים רבים כסמן יחיד סטטי. האפשרות הזו שימושית במקרים שבהם יש מספר גדול של סמנים נדרש. כברירת מחדל, Maps JavaScript API יחליט האם תבוצע אופטימיזציה של סמן. כשיש כמות גדולה של של מפות Google, JavaScript API ינסה לעבד עם אופטימיזציה. לא ניתן לבצע אופטימיזציה של כל הסמנים. בחלק שונים, ייתכן ש-Maps JavaScript API יצטרך לעבד סמנים ללא אופטימיזציה. השבתת עיבוד אופטימלי של אנימציה קובצי GIF או PNG, או כשצריך לעבד כל סמן כ-DOM נפרד לרכיב מסוים. הדוגמה הבאה מציגה יצירה של סמן שעבר אופטימיזציה:

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

הגדרת סמן כנגיש

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

בדוגמה הבאה, הסמן הראשון מקבל מיקוד כשהכרטיסייה בוצעה לחיצה; לאחר מכן אפשר להשתמש במקשי החיצים כדי לעבור בין הסמנים. מקישים על שוב ושוב כדי להמשיך לנווט בשאר פקדי המפה. אם הסמן כולל חלון מידע, ניתן לפתוח אותו על ידי לחיצה על הסמן או על ידי הקשה על מקש 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!"
});

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

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

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