סקירה כללית על אמצעי הבקרה
המפות שמוצגות באמצעות Maps JavaScript API מכילות רכיבי ממשק משתמש שמאפשרים למשתמשים לבצע פעולות במפה. הרכיבים האלה נקראים אמצעי בקרה, ואפשר לכלול באפליקציה וריאציות של אמצעי הבקרה האלה. לחלופין, אפשר לא לעשות כלום ולתת ל-Maps JavaScript API לטפל בכל התנהגות הבקרה.
במפה הבאה מוצגת קבוצת אמצעי הבקרה שמוגדרת כברירת מחדל בממשק API של JavaScript במפות Google:
בהמשך מופיעה רשימה מלאה של אמצעי הבקרה שאפשר להשתמש בהם במפות:
- בפקד הזום מוצגים הלחצנים '+' ו-'-' לשינוי רמת הזום של המפה. הלחצן הזה מופיע כברירת מחדל בפינה השמאלית התחתונה של המפה.
- פקדי המצלמה כוללים פקדים גם לזום וגם להזזה, והם מוצגים כברירת מחדל במקום פקדי הזום כשמשתמשים בערוץ הבטא.
- אמצעי הבקרה של סוג המפה זמין בתפריט נפתח או בסרגל לחצנים אופקי, ומאפשר למשתמש לבחור סוג מפה (
ROADMAP
,SATELLITE
,HYBRID
אוTERRAIN
). אמצעי הבקרה הזה מופיע כברירת מחדל בפינה הימנית העליונה של המפה. - אמצעי הבקרה של Street View מכיל סמל של אטב-איש שאפשר לגרור למפה כדי להפעיל את Street View. הלחצן הזה מופיע כברירת מחדל ליד הפינה השמאלית התחתונה של המפה.
- אמצעי הבקרה לסיבוב מספק שילוב של אפשרויות הטיה וסיבוב במפות שמכילות תמונות בזווית. הלחצן הזה מופיע כברירת מחדל ליד הפינה השמאלית התחתונה של המפה. מידע נוסף זמין במאמר תמונות בזווית של 45°.
- אמצעי הבקרה של קנה המידה מציג רכיב של קנה מידה במפה. אמצעי הבקרה הזה מושבת כברירת מחדל.
- אמצעי הבקרה למסך מלא מאפשר לפתוח את המפה במסך מלא. אמצעי הבקרה הזה מופעל כברירת מחדל במחשבים ובמכשירים ניידים. הערה: ב-iOS אין תמיכה בתכונה של מסך מלא. לכן, הלחצן להצגה במסך מלא לא מופיע במכשירי iOS.
- בפקד מקשי הקיצור מוצגת רשימה של מקשי קיצור לפעולות שונות במפה.
אי אפשר לגשת לאמצעי הבקרה האלה במפה או לשנות אותם ישירות. במקום זאת, משנים את השדות MapOptions
של המפה, שמשפיעים על החשיפה ועל הצגת אמצעי הבקרה. אפשר לשנות את הצגת אמצעי הבקרה בזמן יצירת המפה (באמצעות MapOptions
המתאים) או לשנות את המפה באופן דינמי על ידי קריאה ל-setOptions()
כדי לשנות את האפשרויות של המפה.
לא כל אמצעי הבקרה האלה מופעלים כברירת מחדל. מידע על התנהגות ממשק המשתמש שמוגדר כברירת מחדל (ועל האופן שבו משנים את ההתנהגות הזו) זמין בקטע ממשק המשתמש שמוגדר כברירת מחדל בהמשך.
ממשק המשתמש שמוגדר כברירת מחדל
כברירת מחדל, כל הפקדים נעלמים אם המפה קטנה מדי (200x200 פיקסלים). אפשר לשנות את ההתנהגות הזו על ידי הגדרה מפורשת של הרכיב כאובייקט גלוי. הוספת אמצעי בקרה למפה
ההתנהגות והמראה של הפקדים זהים במכשירים ניידים ובמחשבים, מלבד הפקדים למסך מלא (ראו את ההתנהגות שמתוארת ברשימת הפקדים).
בנוסף, הטיפול במקלדת מופעל כברירת מחדל בכל המכשירים.
השבתת ממשק המשתמש שמוגדר כברירת מחדל
מומלץ להשבית לגמרי את לחצני ממשק המשתמש שמוגדרים כברירת מחדל ב-API. כדי לעשות זאת, מגדירים את המאפיין disableDefaultUI
של המפה (בתוך האובייקט MapOptions
) לערך true
. המאפיין הזה משבית את כל לחצני הבקרה בממשק המשתמש של ממשק ה-API של JavaScript במפות Google. עם זאת, הוא לא משפיע על תנועות העכבר או על מקשי הקיצור במפה הבסיסית, שנשלטים על ידי המאפיינים gestureHandling
ו-keyboardShortcuts
, בהתאמה.
הקוד הבא משבית את לחצני ממשק המשתמש:
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -33, lng: 151 }, disableDefaultUI: true, } ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -33, lng: 151 }, disableDefaultUI: true, }); } window.initMap = initMap;
ניסיון של דוגמה
הוספת פקדים למפה
כדאי להתאים אישית את הממשק על ידי הסרה, הוספה או שינוי של רכיבי הבקרה או ההתנהגות של ממשק המשתמש, ולוודא שעדכונים עתידיים לא ישנו את ההתנהגות הזו. אם רוצים רק להוסיף או לשנות התנהגות קיימת, צריך לוודא שהאמצעי הבקרה נוסף לאפליקציה באופן מפורש.
חלק מאמצעי הבקרה מופיעים במפה כברירת מחדל, ואילו אחרים לא מופיעים אלא אם מבקשים אותם באופן ספציפי. כדי להוסיף או להסיר פקדים מהמפה, צריך להגדיר את הערכים הבאים בשדות של האובייקט MapOptions
: true
כדי שהם יהיו גלויים או false
כדי שהם יהיו מוסתרים:
{ zoomControl: boolean, cameraControl: boolean, mapTypeControl: boolean, scaleControl: boolean, streetViewControl: boolean, rotateControl: boolean, fullscreenControl: boolean }
כברירת מחדל, כל הפקדים נעלמים אם המפה קטנה מ-200x200 פיקסלים.
אפשר לשנות את ההתנהגות הזו על ידי הגדרה מפורשת של הרכיב כאובייקט גלוי. לדוגמה, בטבלה הבאה מוצג אם לחצן הזום גלוי או לא, על סמך גודל המפה וההגדרה של השדה zoomControl
:
גודל מפה | zoomControl |
גלוי? |
---|---|---|
הכול | false |
לא |
הכול | true |
כן |
>= 200x200px | undefined |
כן |
< 200x200px | undefined |
לא |
בדוגמה הבאה מגדירים שהמפה תסתיר את הלחצן להגדלת התצוגה ותציג את הלחצן לשינוי קנה המידה. חשוב לזכור שאנחנו לא משביתים במפורש את ממשק המשתמש שמוגדר כברירת מחדל, כך שהשינויים האלה מוסיפים להתנהגות של ממשק המשתמש שמוגדר כברירת מחדל.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -33, lng: 151 }, zoomControl: false, scaleControl: true, } ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -33, lng: 151 }, zoomControl: false, scaleControl: true, }); } window.initMap = initMap;
ניסיון של דוגמה
אפשרויות בקרה
יש כמה אמצעי בקרה שניתן להגדיר, כך שתוכלו לשנות את ההתנהגות שלהם או את המראה שלהם. לדוגמה, אמצעי הבקרה של סוג המפה עשוי להופיע כסרגל אופקי או כתפריט נפתח.
כדי לשנות את אמצעי הבקרה האלה, משנים את השדות המתאימים של האפשרויות של אמצעי הבקרה באובייקט MapOptions
בזמן יצירת המפה.
לדוגמה, האפשרויות לשינוי אמצעי הבקרה של סוג המפה מצוינות בשדה mapTypeControlOptions
. הלחצן לבחירת סוג המפה עשוי להופיע באחת מהאפשרויות הבאות של style
:
google.maps.MapTypeControlStyle.HORIZONTAL_BAR
מציג את מערך הפקדים כלחצנים בסרגל אופקי, כמו במפות Google.google.maps.MapTypeControlStyle.DROPDOWN_MENU
מציג לחצן בקרה יחיד שמאפשר לבחור את סוג המפה באמצעות תפריט נפתח.google.maps.MapTypeControlStyle.DEFAULT
מציג את התנהגות ברירת המחדל, שמשתנה בהתאם לגודל המסך ועשויה להשתנות בגרסאות עתידיות של ה-API.
שימו לב: אם משנים אפשרויות בקרה, צריך להפעיל את אמצעי הבקרה באופן מפורש על ידי הגדרת הערך המתאים של MapOptions
ל-true
. לדוגמה, כדי להגדיר אמצעי בקרה לסוג המפה כך שיציג את הסגנון DROPDOWN_MENU
, משתמשים בקוד הבא בתוך האובייקט MapOptions
:
... mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU } ...
בדוגמה הבאה מוסבר איך לשנות את המיקום ואת הסגנון של אמצעי הבקרה שמוגדרים כברירת מחדל.
TypeScript
// You can set control options to change the default position or style of many // of the map controls. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -33, lng: 151 }, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU, mapTypeIds: ["roadmap", "terrain"], }, } ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// You can set control options to change the default position or style of many // of the map controls. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -33, lng: 151 }, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU, mapTypeIds: ["roadmap", "terrain"], }, }); } window.initMap = initMap;
ניסיון של דוגמה
בדרך כלל מגדירים את אמצעי הבקרה בזמן יצירת המפה. עם זאת, אפשר לשנות את הצגת הפקדים באופן דינמי על ידי קריאה ל-method setOptions()
של Map
, ולהעביר אליו אפשרויות בקרה חדשות.
שינוי אמצעי הבקרה
מציינים את הצגת אמצעי הבקרה כשיוצרים את המפה באמצעות שדות באובייקט MapOptions
של המפה. השדות האלה מסומנים בהמשך:
zoomControl
מפעיל/ה את כוונון מרחק התצוגה או משבית/ה אותו. כברירת מחדל, הלחצן הזה גלוי ומופיע ליד הפינה השמאלית התחתונה של המפה. השדהzoomControlOptions
מציין גם את הערך שלZoomControlOptions
שישמש לאמצעי הבקרה הזה.cameraControl
מפעיל/ה את אמצעי הבקרה של המצלמה. אמצעי הבקרה הזה גלוי כברירת מחדל במפות Google בערוץ הבטא. השדהcameraControlOptions
מציין גם את הערך שלCameraControlOptions
שישמש לאמצעי הבקרה הזה.mapTypeControl
מפעיל או משבית את הלחצן לבחירת סוג המפה, שמאפשר למשתמש לעבור בין סוגי מפה (כמו מפה ולוויין). כברירת מחדל, הלחצן הזה גלוי ומופיע בפינה הימנית העליונה של המפה. השדהmapTypeControlOptions
מציין גם אתMapTypeControlOptions
שישמש לאמצעי הבקרה הזה.streetViewControl
מפעיל/ה את אטב-האיש, שמאפשר למשתמש להפעיל תמונה פנורמית של Street View. כברירת מחדל, הלחצן הזה גלוי ומופיע ליד הפינה השמאלית התחתונה של המפה. השדהstreetViewControlOptions
מציין גם אתStreetViewControlOptions
שישמש לאמצעי הבקרה הזה.rotateControl
מאפשר/ה להשבית את הופעת הלחצן 'סיבוב', שמאפשר לשלוט בכיוון של תמונות בזווית של 45°. כברירת מחדל, נוכחות הלחצן נקבעת לפי נוכחות או היעדר תמונות מזווית של 45° לסוג המפה הנתון, במיקום ובמרחק התצוגה הנוכחיים. כדי לשנות את התנהגות הרכיב, אפשר להגדיר את הערך שלrotateControlOptions
במפה כך שיציין את הערך שלRotateControlOptions
שבו רוצים להשתמש. לא ניתן להציג את הלחצן אם אין תמונות זמינות בזווית של 45°.scaleControl
מפעיל/ה את הלחצן Scale (קנה מידה) שמציג את קנה המידה של המפה. כברירת מחדל, הלחצן הזה לא גלוי. כשהתכונה מופעלת, היא תמיד מופיעה בפינה השמאלית התחתונה של המפה. בנוסף, השדהscaleControlOptions
מציין את הערך שלScaleControlOptions
שישמש לאמצעי הבקרה הזה.fullscreenControl
מפעיל/ה את הלחצן שפותח את המפה במסך מלא. אמצעי הבקרה הזה מופעל כברירת מחדל במחשבים ובמכשירי Android. כשהפקד מופעל, הוא מופיע ליד הפינה השמאלית העליונה של המפה. בנוסף, השדהfullscreenControlOptions
מציין את הערך שלFullscreenControlOptions
שישמש לאמצעי הבקרה הזה.
שימו לב שאפשר לציין אפשרויות לאמצעי בקרה שתשביתו בהתחלה.
שליטה במיקום
רוב אפשרויות הבקרה מכילות מאפיין position
(מסוג ControlPosition
) שמציין איפה במפה למקם את הרכיב. המיקום של הפקדים האלה לא מוחלט. במקום זאת, ה-API יארגן את אמצעי הבקרה בצורה חכמה, כך שהם יעברו סביב רכיבי מפה קיימים או אמצעי בקרה אחרים, במסגרת אילוצים נתונים (כמו גודל המפה).
הערה: לא ניתן להבטיח שאמצעי הבקרה לא יהיו חופפים בתכנון מורכב, אבל ה-API ינסה לסדר אותם בצורה חכמה.
יש תמיכה במיקומי הבקרה הבאים:
TOP_CENTER
מציין שצריך למקם את הפקדים במרכז העליון של המפה.TOP_LEFT
מציין שצריך למקם את הפקדים בפינה הימנית העליונה של המפה, כאשר רכיבי המשנה של הפקדים 'זורמים' לכיוון מרכז החלק העליון.TOP_RIGHT
מציין שצריך למקם את הלחצן בפינה השמאלית העליונה של המפה, כאשר רכיבי המשנה שלו 'זורמים' לכיוון מרכז החלק העליון.LEFT_TOP
מציין שצריך למקם את הלחצן בפינה הימנית העליונה של המפה, אבל מתחת לרכיביTOP_LEFT
.RIGHT_TOP
מציין שצריך למקם את הלחצן בפינה השמאלית העליונה של המפה, אבל מתחת לרכיבים שלTOP_RIGHT
.- הערך
LEFT_CENTER
מציין שצריך למקם את הלחצן בצד ימין של המפה, במרכז בין המיקומיםTOP_LEFT
ו-BOTTOM_LEFT
. - הערך
RIGHT_CENTER
מציין שצריך למקם את הלחצן בצד שמאל של המפה, במרכז בין המיקומיםTOP_RIGHT
ו-BOTTOM_RIGHT
. - הערך
LEFT_BOTTOM
מציין שצריך למקם את הלחצן בפינה הימנית התחתונה של המפה, אבל מעל רכיביBOTTOM_LEFT
. RIGHT_BOTTOM
מציין שצריך למקם את הלחצן בפינה השמאלית התחתונה של המפה, אבל מעל כל הרכיבים מסוגBOTTOM_RIGHT
.BOTTOM_CENTER
מציין שצריך למקם את הפקדים בחלק התחתון של המפה, באמצע.BOTTOM_LEFT
מציין שצריך למקם את הפקד בפינה הימנית התחתונה של המפה, ורכיבי המשנה שלו צריכים "לזרום" לכיוון מרכז התחתון.BOTTOM_RIGHT
מציין שצריך למקם את הפקדים בפינה השמאלית התחתונה של המפה, ורכיבי המשנה של הפקדים צריכים "לזרום" לכיוון מרכז התחתון.
לתשומת ליבכם: יכול להיות שהמיקומים האלה יהיו זהים למיקומים של רכיבי ממשק המשתמש שאסור לשנות את המיקומים שלהם (כמו זכויות יוצרים והלוגו של Google). במקרים כאלה, אמצעי הבקרה יוצגו בהתאם ללוגיקה שצוינה לכל מיקום, ויוצגו קרוב ככל האפשר למיקום שצוין.
בדוגמה הבאה מוצגת מפה פשוטה שבה כל אמצעי הבקרה מופעלים במיקומים שונים.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 12, center: { lat: -28.643387, lng: 153.612224 }, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.TOP_CENTER, }, zoomControl: true, zoomControlOptions: { position: google.maps.ControlPosition.LEFT_CENTER, }, scaleControl: true, streetViewControl: true, streetViewControlOptions: { position: google.maps.ControlPosition.LEFT_TOP, }, fullscreenControl: true, } ); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: { lat: -28.643387, lng: 153.612224 }, mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.TOP_CENTER, }, zoomControl: true, zoomControlOptions: { position: google.maps.ControlPosition.LEFT_CENTER, }, scaleControl: true, streetViewControl: true, streetViewControlOptions: { position: google.maps.ControlPosition.LEFT_TOP, }, fullscreenControl: true, }); } window.initMap = initMap;
ניסיון של דוגמה
אמצעי בקרה בהתאמה אישית
בנוסף לשינוי הסגנון והמיקום של אמצעי הבקרה הקיימים של ה-API, אפשר ליצור אמצעי בקרה משלכם לטיפול באינטראקציה עם המשתמש. פקדים הם ווידג'טים סטטיים שצפים מעל המפה במיקומים מוחלטים, בניגוד לשכבות-על שזזות עם המפה הבסיסית. באופן בסיסי יותר, אמצעי בקרה הוא רכיב <div>
שיש לו מיקום מוחלט במפה, מציג למשתמש ממשק משתמש כלשהו ומטפל באינטראקציה עם המשתמש או עם המפה, בדרך כלל באמצעות בורר אירועים.
כדי ליצור אמצעי בקרה בהתאמה אישית, נדרשים רק כמה כללים. עם זאת, ההנחיות הבאות יכולות לשמש כשיטות מומלצות:
- מגדירים את קוד ה-CSS המתאים לאלמנטים של אמצעי הבקרה שרוצים להציג.
- טיפול באינטראקציה עם המשתמש או עם המפה באמצעות פונקציות טיפול באירועים (event handlers) לשינויים במאפייני המפה או לאירועי משתמשים (לדוגמה, אירועי
'click'
). - יוצרים רכיב
<div>
כדי לאחסן את אמצעי הבקרה ומוסיפים את הרכיב הזה למאפייןcontrols
שלMap
.
בהמשך מוסבר על כל אחת מהבעיות האלה.
ציור של פקדים מותאמים אישית
אתם יכולים לצייר את הרכיב שלכם בכל דרך שתרצו. באופן כללי, מומלץ למקם את כל רכיבי הבקרה בתוך רכיב <div>
אחד, כדי שתוכלו לבצע פעולות על הבקרה כיחידה אחת. נשתמש בדפוס העיצוב הזה בדוגמאות שבהמשך.
כדי לעצב פקדים אטרקטיביים, צריך ידע מסוים ב-CSS ובמבנה DOM. בקוד הבא מוצגת פונקציה ליצירת רכיב לחצן שמציב את המפה במרכז שיקגו.
function createCenterControl(map) { const controlButton = document.createElement("button"); // Set CSS for the control. controlButton.style.backgroundColor = "#fff"; controlButton.style.border = "2px solid #fff"; controlButton.style.borderRadius = "3px"; controlButton.style.boxShadow = "0 2px 6px rgba(0,0,0,.3)"; controlButton.style.color = "rgb(25,25,25)"; controlButton.style.cursor = "pointer"; controlButton.style.fontFamily = "Roboto,Arial,sans-serif"; controlButton.style.fontSize = "16px"; controlButton.style.lineHeight = "38px"; controlButton.style.margin = "8px 0 22px"; controlButton.style.padding = "0 5px"; controlButton.style.textAlign = "center"; controlButton.textContent = "Center Map"; controlButton.title = "Click to recenter the map"; controlButton.type = "button"; // Setup the click event listeners: simply set the map to Chicago. controlButton.addEventListener("click", () => { map.setCenter(chicago); }); return controlButton; }
טיפול באירועים מפקדים מותאמים אישית
כדי שרכיב בקרה יהיה שימושי, הוא צריך לעשות משהו. אתם קובעים מה הלחצן יעשה. אמצעי הבקרה יכול להגיב להזנת משתמש, או להגיב לשינויים במצב של Map
.
כדי להגיב לקלט של משתמשים, משתמשים ב-addEventListener()
, שמטפל באירועי DOM נתמכים. קטע הקוד הבא מוסיף מאזין לאירוע 'click'
של הדפדפן. חשוב לזכור שהאירוע הזה מתקבל מה-DOM ולא מהמפה.
// Setup the click event listener: set the map to center on Chicago var chicago = {lat: 41.850, lng: -87.650}; controlButton.addEventListener('click', () => { map.setCenter(chicago); });
הנגשת אמצעי הבקרה בהתאמה אישית
כדי לוודא שהפקדים מקבלים אירועי מקלדת ומופיעים בצורה נכונה בקוראי מסך:
- תמיד צריך להשתמש ברכיבי HTML מקומיים ללחצנים, לרכיבי טפסים ולתוויות. יש להשתמש ברכיב DIV רק כקונטיינר לאחסון פקדים מקומיים. לעולם אל תשנו את המטרה של רכיב DIV כרכיב אינטראקטיבי בממשק המשתמש.
- כשמתאים, משתמשים ברכיב
label
, במאפייןtitle
או במאפייןaria-label
כדי לספק מידע על רכיב בממשק המשתמש.
מיקום של אמצעי בקרה מותאמים אישית
כדי למקם את אמצעי הבקרה בהתאמה אישית במפה, צריך להציב אותם במיקומים המתאימים במאפיין controls
של האובייקט Map
. הנכס הזה מכיל מערך של google.maps.ControlPosition
. כדי להוסיף למפה אמצעי בקרה בהתאמה אישית, מוסיפים את Node
(בדרך כלל <div>
) ל-ControlPosition
המתאים. (מידע על המיקומים האלה מופיע בקטע בקרת מיקום למעלה).
כל ControlPosition
שומר MVCArray
של אמצעי הבקרה שמוצגים במיקום הזה. כתוצאה מכך, כשמוסיפים או מסירים אמצעי בקרה מהמיקום, ה-API מעדכן את אמצעי הבקרה בהתאם.
ממשק ה-API ממיק את אמצעי הבקרה בכל מיקום לפי הסדר של המאפיין index
. אמצעי הבקרה עם אינדקס נמוך יותר ממוקמים קודם.
לדוגמה, שני רכיבי בקרה מותאמים אישית במיקום BOTTOM_RIGHT
יוצגו לפי סדר האינדקס הזה, כאשר ערכים נמוכים יותר באינדקס מקבלים עדיפות. כברירת מחדל, כל אמצעי הבקרה בהתאמה אישית ממוקמים אחרי אמצעי הבקרה שמוגדרים כברירת מחדל בממשק ה-API. כדי לשנות את ההתנהגות הזו, אפשר להגדיר את המאפיין index
של אמצעי הבקרה לערך שלילי. אי אפשר להציב פקדים מותאמים אישית שמאלה מהלוגו או שמימין לזכויות היוצרים.
הקוד הבא יוצר רכיב בקרה מותאם אישית חדש (ה-constructor שלו לא מוצג) ומוסיף אותו למפה במיקום TOP_RIGHT
.
var map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create a DIV to attach the control UI to the Map. const centerControlDiv = document.createElement("div"); // Create the control. This code calls a function that // creates a new instance of a button control. const centerControl = createCenterControl(map); // Append the control to the DIV. centerControlDiv.appendChild(centerControl); // Add the control to the map at a designated control position // by pushing it on the position's array. This code will // implicitly add the control to the DOM, through the Map // object. You should not attach the control manually. map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
דוגמה לאמצעי בקרה מותאם אישית
אמצעי הבקרה הבא פשוט (אבל לא שימושי במיוחד) ומשלב את הדפוסים שמוצגים למעלה. אמצעי הבקרה הזה מגיב לאירועי DOM 'click'
על ידי מרכוז המפה במיקום ברירת מחדל מסוים:
TypeScript
let map: google.maps.Map; const chicago = { lat: 41.85, lng: -87.65 }; /** * Creates a control that recenters the map on Chicago. */ function createCenterControl(map) { const controlButton = document.createElement('button'); // Set CSS for the control. controlButton.style.backgroundColor = '#fff'; controlButton.style.border = '2px solid #fff'; controlButton.style.borderRadius = '3px'; controlButton.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)'; controlButton.style.color = 'rgb(25,25,25)'; controlButton.style.cursor = 'pointer'; controlButton.style.fontFamily = 'Roboto,Arial,sans-serif'; controlButton.style.fontSize = '16px'; controlButton.style.lineHeight = '38px'; controlButton.style.margin = '8px 0 22px'; controlButton.style.padding = '0 5px'; controlButton.style.textAlign = 'center'; controlButton.textContent = 'Center Map'; controlButton.title = 'Click to recenter the map'; controlButton.type = 'button'; // Setup the click event listeners: simply set the map to Chicago. controlButton.addEventListener('click', () => { map.setCenter(chicago); }); return controlButton; } function initMap() { map = new google.maps.Map(document.getElementById('map') as HTMLElement, { zoom: 12, center: chicago, }); // Create the DIV to hold the control. const centerControlDiv = document.createElement('div'); // Create the control. const centerControl = createCenterControl(map); // Append the control to the DIV. centerControlDiv.appendChild(centerControl); map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
let map; const chicago = { lat: 41.85, lng: -87.65 }; /** * Creates a control that recenters the map on Chicago. */ function createCenterControl(map) { const controlButton = document.createElement("button"); // Set CSS for the control. controlButton.style.backgroundColor = "#fff"; controlButton.style.border = "2px solid #fff"; controlButton.style.borderRadius = "3px"; controlButton.style.boxShadow = "0 2px 6px rgba(0,0,0,.3)"; controlButton.style.color = "rgb(25,25,25)"; controlButton.style.cursor = "pointer"; controlButton.style.fontFamily = "Roboto,Arial,sans-serif"; controlButton.style.fontSize = "16px"; controlButton.style.lineHeight = "38px"; controlButton.style.margin = "8px 0 22px"; controlButton.style.padding = "0 5px"; controlButton.style.textAlign = "center"; controlButton.textContent = "Center Map"; controlButton.title = "Click to recenter the map"; controlButton.type = "button"; // Setup the click event listeners: simply set the map to Chicago. controlButton.addEventListener("click", () => { map.setCenter(chicago); }); return controlButton; } function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: chicago, }); // Create the DIV to hold the control. const centerControlDiv = document.createElement("div"); // Create the control. const centerControl = createCenterControl(map); // Append the control to the DIV. centerControlDiv.appendChild(centerControl); map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } window.initMap = initMap;
ניסיון של דוגמה
הוספת מצב לפקדים
אמצעי הבקרה יכולים גם לאחסן מצב. הדוגמה הבאה דומה לדוגמה הקודמת, אבל הלחצן 'הגדרת מיקום בית' מאפשר להגדיר מיקום בית חדש. כדי לעשות זאת, יוצרים מאפיין home_
בתוך אמצעי הבקרה כדי לאחסן את המצב הזה ולספק פונקציות 'קבלת ערך' ו'הגדרת ערך' למצב הזה.
TypeScript
let map: google.maps.Map; const chicago: google.maps.LatLngLiteral = { lat: 41.85, lng: -87.65 }; /** * The CenterControl adds a control to the map that recenters the map on * Chicago. */ class CenterControl { private map_: google.maps.Map; private center_: google.maps.LatLng; constructor( controlDiv: HTMLElement, map: google.maps.Map, center: google.maps.LatLngLiteral ) { this.map_ = map; // Set the center property upon construction this.center_ = new google.maps.LatLng(center); controlDiv.style.clear = "both"; // Set CSS for the control border const goCenterUI = document.createElement("button"); goCenterUI.id = "goCenterUI"; goCenterUI.title = "Click to recenter the map"; controlDiv.appendChild(goCenterUI); // Set CSS for the control interior const goCenterText = document.createElement("div"); goCenterText.id = "goCenterText"; goCenterText.innerHTML = "Center Map"; goCenterUI.appendChild(goCenterText); // Set CSS for the setCenter control border const setCenterUI = document.createElement("button"); setCenterUI.id = "setCenterUI"; setCenterUI.title = "Click to change the center of the map"; controlDiv.appendChild(setCenterUI); // Set CSS for the control interior const setCenterText = document.createElement("div"); setCenterText.id = "setCenterText"; setCenterText.innerHTML = "Set Center"; setCenterUI.appendChild(setCenterText); // Set up the click event listener for 'Center Map': Set the center of // the map // to the current center of the control. goCenterUI.addEventListener("click", () => { const currentCenter = this.center_; this.map_.setCenter(currentCenter); }); // Set up the click event listener for 'Set Center': Set the center of // the control to the current center of the map. setCenterUI.addEventListener("click", () => { const newCenter = this.map_.getCenter()!; if (newCenter) { this.center_ = newCenter; } }); } } function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 12, center: chicago, }); // Create the DIV to hold the control and call the CenterControl() // constructor passing in this DIV. const centerControlDiv = document.createElement("div"); const control = new CenterControl(centerControlDiv, map, chicago); // @ts-ignore centerControlDiv.index = 1; centerControlDiv.style.paddingTop = "10px"; map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
let map; const chicago = { lat: 41.85, lng: -87.65 }; /** * The CenterControl adds a control to the map that recenters the map on * Chicago. */ class CenterControl { map_; center_; constructor(controlDiv, map, center) { this.map_ = map; // Set the center property upon construction this.center_ = new google.maps.LatLng(center); controlDiv.style.clear = "both"; // Set CSS for the control border const goCenterUI = document.createElement("button"); goCenterUI.id = "goCenterUI"; goCenterUI.title = "Click to recenter the map"; controlDiv.appendChild(goCenterUI); // Set CSS for the control interior const goCenterText = document.createElement("div"); goCenterText.id = "goCenterText"; goCenterText.innerHTML = "Center Map"; goCenterUI.appendChild(goCenterText); // Set CSS for the setCenter control border const setCenterUI = document.createElement("button"); setCenterUI.id = "setCenterUI"; setCenterUI.title = "Click to change the center of the map"; controlDiv.appendChild(setCenterUI); // Set CSS for the control interior const setCenterText = document.createElement("div"); setCenterText.id = "setCenterText"; setCenterText.innerHTML = "Set Center"; setCenterUI.appendChild(setCenterText); // Set up the click event listener for 'Center Map': Set the center of // the map // to the current center of the control. goCenterUI.addEventListener("click", () => { const currentCenter = this.center_; this.map_.setCenter(currentCenter); }); // Set up the click event listener for 'Set Center': Set the center of // the control to the current center of the map. setCenterUI.addEventListener("click", () => { const newCenter = this.map_.getCenter(); if (newCenter) { this.center_ = newCenter; } }); } } function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: chicago, }); // Create the DIV to hold the control and call the CenterControl() // constructor passing in this DIV. const centerControlDiv = document.createElement("div"); const control = new CenterControl(centerControlDiv, map, chicago); // @ts-ignore centerControlDiv.index = 1; centerControlDiv.style.paddingTop = "10px"; map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv); } window.initMap = initMap;