Omówienie ustawień
Mapy wyświetlane za pomocą interfejsu Maps JavaScript API zawierają elementy interfejsu, które umożliwiają użytkownikom interakcję z mapą. Te elementy są nazywane elementami sterującymi. W aplikacji możesz uwzględnić różne ich wersje. Możesz też nie robić nic i pozwolić interfejsowi Maps JavaScript API na obsługę wszystkich zachowań elementów sterujących.
Poniższa mapa pokazuje domyślny zestaw elementów sterujących wyświetlanych przez interfejs Maps JavaScript API:
Zgodnie z ruchem wskazówek zegara od lewego górnego rogu: Typ mapy, Pełny ekran, Aparat, Street View, Skróty klawiszowe.
Poniżej znajdziesz listę wszystkich elementów sterujących, których możesz używać na mapach:
- Kontrolka typu mapy jest dostępna w stylu menu lub poziomego paska przycisków, co pozwala użytkownikowi wybrać typ mapy (
ROADMAP,SATELLITE,HYBRIDlubTERRAIN). Domyślnie ta kontrolka pojawia się w lewym górnym rogu mapy. - Element sterujący pełnym ekranem umożliwia otwarcie mapy w trybie pełnoekranowym. To ustawienie jest domyślnie włączone na komputerach i urządzeniach mobilnych. Uwaga: iOS nie obsługuje funkcji pełnego ekranu. Dlatego element sterujący pełnym ekranem nie jest widoczny na urządzeniach z iOS.
- Sterowanie kamerą obejmuje zarówno powiększanie, jak i przesuwanie.
- Element sterujący Street View zawiera ikonę Pegmana, którą można przeciągnąć na mapę, aby włączyć Street View. Ten element sterujący domyślnie pojawia się w prawym dolnym rogu mapy.
- Element sterujący obracaniem udostępnia kombinację opcji przechylania i obracania map zawierających zdjęcia 3D. Ten element sterujący domyślnie pojawia się w prawym dolnym rogu mapy. Więcej informacji znajdziesz w artykule Omówienie funkcji 3D.
- Kontrolka skali wyświetla element skali mapy. Domyślnie ta opcja jest wyłączona.
- Element sterujący skrótami klawiszowymi wyświetla listę skrótów klawiszowych do interakcji z mapą.
Nie masz bezpośredniego dostępu do tych elementów sterujących mapą i nie możesz ich modyfikować. Zamiast tego modyfikujesz pola MapOptions mapy, które wpływają na widoczność i prezentację elementów sterujących. Możesz dostosować prezentację elementów sterujących podczas tworzenia instancji mapy (za pomocą odpowiedniego obiektu MapOptions) lub dynamicznie modyfikować mapę, wywołując metodę setOptions(), aby zmienić opcje mapy.
Nie wszystkie te ustawienia są domyślnie włączone. Aby dowiedzieć się więcej o domyślnym zachowaniu interfejsu (i o tym, jak je zmienić), zapoznaj się z sekcją Domyślny interfejs poniżej.
Domyślny interfejs użytkownika
Domyślnie wszystkie elementy sterujące znikają, jeśli mapa jest zbyt mała (200 x 200 pikseli). Możesz zastąpić to działanie, ustawiając element sterujący jako widoczny. Zobacz Dodawanie elementów sterujących do mapy.
Działanie i wygląd elementów sterujących są takie same na urządzeniach mobilnych i komputerach, z wyjątkiem elementu sterującego pełnym ekranem (patrz zachowanie opisane na liście elementów sterujących).
Dodatkowo obsługa klawiatury jest domyślnie włączona na wszystkich urządzeniach.
Wyłączanie domyślnego interfejsu
Możesz całkowicie wyłączyć domyślne przyciski interfejsu API. Aby to zrobić, ustaw właściwość disableDefaultUI mapy (w obiekcie MapOptions) na true. Ta właściwość wyłącza wszystkie elementy sterujące interfejsu Maps JavaScript API. Nie ma to jednak wpływu na gesty myszy ani skróty klawiszowe na mapie podstawowej, które są kontrolowane odpowiednio przez właściwości gestureHandling i keyboardShortcuts.
Poniższy kod wyłącza przyciski interfejsu:
TypeScript
innerMap.setOptions({ // Disable the default UI. disableDefaultUI: true, });
JavaScript
innerMap.setOptions({ // Disable the default UI. disableDefaultUI: true, });
Dodawanie elementów sterujących do mapy
Możesz dostosować interfejs, usuwając, dodając lub modyfikując zachowanie lub elementy sterujące interfejsu, i upewnić się, że przyszłe aktualizacje nie zmienią tego zachowania. Jeśli chcesz tylko dodać lub zmodyfikować istniejące zachowanie, musisz upewnić się, że element sterujący został wyraźnie dodany do aplikacji.
Niektóre elementy sterujące są domyślnie wyświetlane na mapie, a inne nie pojawią się, dopóki nie zostaną wyraźnie zażądane. Dodawanie i usuwanie elementów sterujących z mapy jest określone w tych polach obiektu MapOptions, które ustawiasz na true, aby były widoczne, lub na false, aby je ukryć:
{ cameraControl: boolean, mapTypeControl: boolean, scaleControl: boolean, streetViewControl: boolean, rotateControl: boolean, fullscreenControl: boolean }
Domyślnie wszystkie elementy sterujące znikają, jeśli mapa jest mniejsza niż 200 x 200 pikseli.
Możesz zastąpić to działanie, ustawiając element sterujący jako widoczny. Na przykład w poniższej tabeli pokazano, czy element sterujący aparatu jest widoczny, czy nie, w zależności od rozmiaru mapy i ustawienia pola cameraControl:
| Rozmiar mapy | cameraControl |
Widoczny? |
|---|---|---|
| Dowolna | false |
Nie |
| Dowolna | true |
Tak |
| >= 200 x 200 pikseli | undefined |
Tak |
| < 200 x 200 pikseli | undefined |
Nie |
W tym przykładzie mapa jest ustawiona tak, aby ukrywać element sterujący aparatu i wyświetlać element sterujący skali. Pamiętaj, że nie wyłączamy domyślnego interfejsu, więc te modyfikacje są dodawane do domyślnego zachowania interfejsu.
TypeScript
innerMap.setOptions({ cameraControl: false, scaleControl: true, });
JavaScript
innerMap.setOptions({ cameraControl: false, scaleControl: true, });
Opcje ustawień
Niektóre elementy sterujące można konfigurować, co pozwala na zmianę ich zachowania lub wyglądu. Na przykład element sterujący Typ mapy może być wyświetlany jako pasek poziomy lub menu.
Te elementy sterujące można modyfikować, zmieniając odpowiednie pola opcji w obiekcie MapOptions podczas tworzenia mapy.
Na przykład opcje zmiany elementu sterującego Typ mapy są wskazane w polu mapTypeControlOptions. Element sterujący Typ mapy może być wyświetlany w jednej z tych opcji style:
google.maps.MapTypeControlStyle.HORIZONTAL_BARwyświetla tablicę elementów sterujących jako przyciski na poziomym pasku, tak jak w Mapach Google.google.maps.MapTypeControlStyle.DROPDOWN_MENUwyświetla pojedynczy przycisk, który umożliwia wybranie typu mapy za pomocą menu.google.maps.MapTypeControlStyle.DEFAULTwyświetla działanie domyślne, które zależy od rozmiaru ekranu i może ulec zmianie w przyszłych wersjach interfejsu API.
Pamiętaj, że jeśli zmodyfikujesz opcje ustawienia, musisz je też wyraźnie włączyć, ustawiając odpowiednią wartość MapOptions na true. Aby na przykład ustawić kontrolkę typu mapy na styl DROPDOWN_MENU, użyj tego kodu w obiekcie MapOptions:
... mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU } ...
Poniższy przykład pokazuje, jak zmienić domyślne położenie i styl elementów sterujących.
TypeScript
innerMap.setOptions({ mapTypeControl: true, mapTypeControlOptions: { style: MapTypeControlStyle.DROPDOWN_MENU, mapTypeIds: [MapTypeId.ROADMAP, MapTypeId.TERRAIN], position: ControlPosition.TOP_CENTER, }, });
JavaScript
innerMap.setOptions({ mapTypeControl: true, mapTypeControlOptions: { style: MapTypeControlStyle.DROPDOWN_MENU, mapTypeIds: [MapTypeId.ROADMAP, MapTypeId.TERRAIN], position: ControlPosition.TOP_CENTER, }, });
Elementy sterujące są zwykle konfigurowane podczas tworzenia mapy. Możesz jednak dynamicznie zmieniać sposób wyświetlania elementów sterujących, wywołując metodę setOptions() obiektu Map i przekazując jej nowe opcje elementów sterujących.
Modyfikuj ustawienia
Sposób prezentacji elementu sterującego określasz podczas tworzenia mapy za pomocą pól w obiekcie MapOptions mapy. Te pola są oznaczone poniżej:
cameraControlwłącza lub wyłącza element sterujący kamery, który umożliwia użytkownikowi powiększanie i przesuwanie mapy. Ten element sterujący jest domyślnie widoczny na wszystkich mapach. PolecameraControlOptionsdodatkowo określaCameraControlOptions, którego należy użyć w przypadku tego elementu sterującego.mapTypeControlwłącza lub wyłącza element sterujący Typ mapy, który umożliwia użytkownikowi przełączanie się między typami map (np. Mapa i Satelita). Domyślnie ten element sterujący jest widoczny i pojawia się w lewym górnym rogu mapy. PolemapTypeControlOptionsdodatkowo określaMapTypeControlOptions, którego należy użyć w przypadku tego elementu sterującego.streetViewControlwłącza lub wyłącza element sterujący Pegman, który umożliwia użytkownikowi aktywowanie panoramy Street View. Domyślnie ten element sterujący jest widoczny i pojawia się w prawym dolnym rogu mapy. PolestreetViewControlOptionsdodatkowo określaStreetViewControlOptions, którego należy użyć w przypadku tego elementu sterującego.rotateControlwłącza lub wyłącza wyświetlanie elementu sterującego obracaniem, który służy do kontrolowania orientacji zdjęć 3D. Domyślnie obecność elementu sterującego jest określana na podstawie obecności lub braku zdjęć 3D dla danego typu mapy przy bieżącym powiększeniu i lokalizacji. Możesz zmienić zachowanie elementu sterującego, ustawiając właściwośćrotateControlOptionsmapy, aby określić, którego elementuRotateControlOptionschcesz użyć. Element sterujący będzie widoczny tylko na mapach podstawowych 3D.scaleControlwłącza lub wyłącza element sterujący Skala, który wyświetla skalę mapy. Domyślnie ta opcja jest niewidoczna. Gdy jest włączony, zawsze pojawia się w prawym dolnym rogu mapy.scaleControlOptionsdodatkowo określaScaleControlOptions, którego należy użyć w przypadku tego elementu sterującego.fullscreenControlwłącza/wyłącza element sterujący, który otwiera mapę w trybie pełnoekranowym. Domyślnie to ustawienie jest włączone na komputerach i urządzeniach z Androidem. Gdy jest włączony, pojawia się w prawym górnym rogu mapy.fullscreenControlOptionsdodatkowo określaFullscreenControlOptions, którego należy użyć w przypadku tego elementu sterującego.
Pamiętaj, że możesz określić opcje dla ustawień, które początkowo wyłączysz.
Umieszczenie elementów sterujących
Większość opcji elementów sterujących zawiera właściwość position (typu ControlPosition), która wskazuje, gdzie na mapie umieścić element sterujący. Położenie tych elementów sterujących nie jest bezwzględne. Zamiast tego interfejs API inteligentnie rozmieści elementy sterujące, umieszczając je wokół istniejących elementów mapy lub innych elementów sterujących w ramach określonych ograniczeń (takich jak rozmiar mapy).
Istnieją 2 rodzaje pozycji elementów sterujących: starsze i logiczne. Zalecamy używanie wartości logicznych, aby automatycznie obsługiwać układy od lewej do prawej (LTR) i od prawej do lewej (RTL). Zobacz przewodnik
W poniższych tabelach przedstawiono obsługiwane pozycje elementów sterujących w kontekstach LTR i RTL.
Pozycje LTR
| Pozycja (kontekst LTR) | Stała logiczna (zalecana) | Starsza stała |
|---|---|---|
| Lewy górny róg | BLOCK_START_INLINE_START |
TOP_LEFT |
| Góra, środek | BLOCK_START_INLINE_CENTER |
TOP_CENTER |
| Prawy górny róg | BLOCK_START_INLINE_END |
TOP_RIGHT |
| U góry z lewej | INLINE_START_BLOCK_START |
LEFT_TOP |
| Lewy środek | INLINE_START_BLOCK_CENTER |
LEFT_CENTER |
| Lewy dolny róg | INLINE_START_BLOCK_END |
LEFT_BOTTOM |
| Prawy górny | INLINE_END_BLOCK_START |
RIGHT_TOP |
| Środek po prawej | INLINE_END_BLOCK_CENTER |
RIGHT_CENTER |
| Prawy dolny róg | INLINE_END_BLOCK_END |
RIGHT_BOTTOM |
| Lewy dolny róg | BLOCK_END_INLINE_START |
BOTTOM_LEFT |
| Na dole pośrodku | BLOCK_END_INLINE_CENTER |
BOTTOM_CENTER |
| Prawy dolny róg | BLOCK_END_INLINE_END |
BOTTOM_RIGHT |
Pozycje RTL
| Pozycja (kontekst RTL) | Stała logiczna (zalecana) | Stała starszego typu |
|---|---|---|
| Prawy górny róg | BLOCK_START_INLINE_START |
TOP_RIGHT |
| Góra, środek | BLOCK_START_INLINE_CENTER |
TOP_CENTER |
| Lewy górny róg | BLOCK_START_INLINE_END |
TOP_LEFT |
| Prawy górny róg | INLINE_START_BLOCK_START |
RIGHT_TOP |
| Środek po prawej | INLINE_START_BLOCK_CENTER |
RIGHT_CENTER |
| Prawy dolny róg | INLINE_START_BLOCK_END |
RIGHT_BOTTOM |
| U góry z lewej | INLINE_END_BLOCK_START |
LEFT_TOP |
| Lewy środek | INLINE_END_BLOCK_CENTER |
LEFT_CENTER |
| Lewy dolny róg | INLINE_END_BLOCK_END |
LEFT_BOTTOM |
| Prawy dolny róg | BLOCK_END_INLINE_START |
BOTTOM_RIGHT |
| Na dole pośrodku | BLOCK_END_INLINE_CENTER |
BOTTOM_CENTER |
| Lewy dolny róg | BLOCK_END_INLINE_END |
BOTTOM_LEFT |
Kliknij etykiety, aby przełączyć mapę między trybami LTR i RTL.
Pamiętaj, że te pozycje mogą pokrywać się z pozycjami elementów interfejsu, których nie można modyfikować (takich jak informacje o prawach autorskich i logo Google). W takich przypadkach elementy sterujące będą się przemieszczać zgodnie z logiką opisaną dla każdej pozycji i będą wyświetlane jak najbliżej wskazanej pozycji. Nie możemy zagwarantować, że elementy sterujące nie będą się nakładać w przypadku skomplikowanych układów, ale interfejs API spróbuje je rozmieścić w inteligentny sposób.
Poniższy przykład pokazuje podstawową mapę z włączonymi wszystkimi elementami sterującymi w różnych pozycjach.
TypeScript
const mapElement = document.querySelector('gmp-map')!; let innerMap: google.maps.Map; async function init() { // Request needed libraries. const [{ MapTypeControlStyle }, { ControlPosition }] = await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('core'), ]); // Get the inner map. innerMap = mapElement.innerMap; // Set the map's controls options. innerMap.setOptions({ mapTypeControl: true, mapTypeControlOptions: { style: MapTypeControlStyle.HORIZONTAL_BAR, position: ControlPosition.BLOCK_START_INLINE_CENTER, }, zoomControl: true, zoomControlOptions: { position: ControlPosition.INLINE_START_BLOCK_CENTER, }, scaleControl: true, streetViewControl: true, streetViewControlOptions: { position: ControlPosition.INLINE_START_BLOCK_START, }, fullscreenControl: true, }); } void init();
JavaScript
const mapElement = document.querySelector('gmp-map'); let innerMap; async function init() { // Request needed libraries. const [{ MapTypeControlStyle }, { ControlPosition }] = await Promise.all([ google.maps.importLibrary('maps'), google.maps.importLibrary('core'), ]); // Get the inner map. innerMap = mapElement.innerMap; // Set the map's controls options. innerMap.setOptions({ mapTypeControl: true, mapTypeControlOptions: { style: MapTypeControlStyle.HORIZONTAL_BAR, position: ControlPosition.BLOCK_START_INLINE_CENTER, }, zoomControl: true, zoomControlOptions: { position: ControlPosition.INLINE_START_BLOCK_CENTER, }, scaleControl: true, streetViewControl: true, streetViewControlOptions: { position: ControlPosition.INLINE_START_BLOCK_START, }, fullscreenControl: true, }); } void init();
Elementy sterujące niestandardowe
Oprócz modyfikowania stylu i pozycji istniejących elementów sterujących interfejsu API możesz tworzyć własne elementy sterujące do obsługi interakcji z użytkownikiem. Elementy sterujące to nieruchome widżety, które unoszą się nad mapą w bezwzględnych pozycjach, w przeciwieństwie do nakładek, które poruszają się wraz z mapą. Mówiąc bardziej ogólnie, element sterujący to element <div>, który ma bezwzględną pozycję na mapie, wyświetla użytkownikowi interfejs i obsługuje interakcję z użytkownikiem lub mapą, zwykle za pomocą modułu obsługi zdarzeń.
Aby utworzyć własne ustawienie niestandardowe, musisz przestrzegać kilku reguł. Możesz jednak skorzystać z tych sprawdzonych metod:
- Zdefiniuj odpowiedni kod CSS dla elementów sterujących, które mają być wyświetlane.
- Obsługuj interakcje z użytkownikiem lub mapą za pomocą modułów obsługi zdarzeń, które reagują na zmiany właściwości mapy lub zdarzenia użytkownika (np. zdarzenia
'click'). - Utwórz element
<div>, który będzie zawierał element sterujący, i dodaj go do właściwościcontrolselementuMap.
Każdy z tych problemów został omówiony poniżej.
Rysowanie elementów sterujących niestandardowych
Sposób narysowania elementu sterującego zależy od Ciebie. Zasadniczo zalecamy umieszczenie całej prezentacji elementu sterującego w jednym elemencie <div>, aby można było nim manipulować jako jedną jednostką. W poniższych przykładach użyjemy tego wzorca projektowego.
Projektowanie atrakcyjnych elementów sterujących wymaga pewnej znajomości CSS i struktury DOM. Poniższe przykłady kodu pokazują, jak dodać element sterujący niestandardowy za pomocą deklaratywnego kodu HTML i metod programistycznych.
Deklaratywna usługa porównywania cen
Podane niżej style CSS zapewniają wygląd zgodny z domyślnymi elementami sterującymi. Użyj tych stylów w obu poniższych przykładach:
.streetview-toggle-button { align-items: center; background: white; border: none; border-radius: 2px; box-shadow: 0 1px 4px -1px rgba(0, 0, 0, 0.3); color: rgb(86, 86, 86); cursor: pointer; display: flex; font-family: Roboto, Arial, sans-serif; font-size: 18px; font-weight: 400; height: 40px; justify-content: center; margin: 10px 0; padding: 0 17px; } .streetview-toggle-button:hover { background: #f4f4f4; color: #000; }
Deklaratywny kod HTML
Te fragmenty kodu pokazują, jak utworzyć niestandardowy element sterujący w sposób deklaratywny.
W kodzie HTML do pozycjonowania elementu sterującego używany jest element DIV o identyfikatorze container. Jest on zagnieżdżony w elemencie gmp-map, a przycisk jest dodawany do elementu DIV. Atrybut slot jest ustawiony na control-inline-start-block-start, aby umieścić element sterujący w lewym górnym rogu mapy.
<gmp-map
center="41.027748173921374, -92.41852445367961"
zoom="13"
map-id="DEMO_MAP_ID">
<div id="container" slot="control-inline-start-block-start">
<input type="button"
id="streetview-toggle-button"
class="button"
value="Click this button" />
</div>
</gmp-map>W kodzie JavaScript getElementById() służy do znajdowania elementu DIV i przycisku, do przycisku dodawany jest detektor zdarzeń, a przycisk jest dołączany do elementu DIV.
// Create a DIV to attach the control UI to the Map. const container = document.getElementById("container"); // Get the control button from the HTML page. const controlButton = document.getElementById("streetview-toggle-button"); // Add a click event listener. controlButton.addEventListener("click", () => { window.alert("You clicked the button!"); }); // Add the control to the DIV. container.append(controlButton);
Automatyzacja JavaScriptu
Ten fragment kodu pokazuje, jak programowo utworzyć element sterujący przycisku. Style CSS są zdefiniowane powyżej.
// Create a DIV to attach the control UI to the Map. const container = document.getElementById("container"); // Position the control in the top left corner of the map. container.slot = "control-block-start-inline-start"; // Create the control. const controlButton = document.createElement("button"); controlButton.classList.add("streetview-toggle-button"); controlButton.textContent = "Click this button"; controlButton.type = "button"; // Add a click event listener. controlButton.addEventListener("click", () => { window.alert("You clicked the button!"); }); // Add the control to the DIV. container.append(controlButton);
Obsługa zdarzeń z niestandardowych elementów sterujących
Aby element sterujący był przydatny, musi coś robić. To, co robi element sterujący, zależy od Ciebie. Element sterujący może reagować na dane wejściowe użytkownika lub na zmiany stanu Map.
Aby reagować na dane wejściowe użytkownika, użyj addEventListener(), który obsługuje obsługiwane zdarzenia DOM. Ten fragment kodu dodaje detektor zdarzenia 'click' przeglądarki. Pamiętaj, że to zdarzenie jest odbierane z DOM, a nie z mapy.
// 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); });
Ułatwianie dostępu do niestandardowych elementów sterujących
Aby mieć pewność, że elementy sterujące otrzymują zdarzenia klawiatury i są prawidłowo wyświetlane w czytnikach ekranu:
- Zawsze używaj natywnych elementów HTML w przypadku przycisków, elementów formularzy i etykiet. Elementu DIV używaj tylko jako kontenera do przechowywania natywnych elementów sterujących. Nigdy nie używaj go jako interaktywnego elementu interfejsu.
- Użyj elementu
label, atrybututitlelub atrybutuaria-label, aby podać informacje o elemencie interfejsu.
Pozycja niestandardowych elementów sterujących
Użyj atrybutu slot, aby umieścić elementy sterujące w odpowiednim miejscu.
Informacje o tych pozycjach znajdziesz w sekcji Pozycjonowanie elementów sterujących powyżej.
Każdy element ControlPosition przechowuje element MVCArray elementów sterujących wyświetlanych na tej pozycji. W rezultacie, gdy elementy sterujące zostaną dodane do pozycji lub z niej usunięte, interfejs API odpowiednio je zaktualizuje.
Poniższy kod tworzy nowy element sterujący (jego konstruktor nie jest widoczny) i dodaje go do mapy w pozycji BLOCK_START_INLINE_END (w prawym górnym rogu w kontekście LTR).
// 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);
// Push the control to the BLOCK_START_INLINE_END position.
innerMap.controls[google.maps.ControlPosition.BLOCK_START_INLINE_END].push(centerControlDiv);Aby ustawić pozycję elementu sterującego w sposób deklaratywny, ustaw atrybut slot w kodzie HTML:
<gmp-map center="30.72851568848909, -81.54675994068873" zoom="12">
<div slot="control-block-start-inline-end">
<!-- Control HTML -->
</div>
</gmp-map>Przykład ustawienia niestandardowego
Poniższy element sterujący jest prosty (choć niezbyt przydatny) i łączy wzorce pokazane powyżej. Ten element sterujący reaguje na zdarzenia DOM 'click', wyśrodkowując mapę w określonej domyślnej lokalizacji:
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;
Dodaj stan do ustawień
Elementy sterujące mogą też przechowywać stan. Poniższy przykład jest podobny do poprzedniego, ale element sterujący zawiera dodatkowy przycisk „Ustaw dom”, który ustawia element sterujący tak, aby wyświetlał nową lokalizację domu. W tym celu tworzymy w elemencie sterującym właściwość home_, która będzie przechowywać ten stan, oraz udostępniamy metody pobierające i ustawiające ten stan.
TypeScript
let innerMap: google.maps.Map; const mapElement = document.querySelector('gmp-map')!; let center: google.maps.LatLngLiteral | google.maps.LatLng = { lat: 41.85, lng: -87.65, }; async function init() { await google.maps.importLibrary('maps'); innerMap = mapElement.innerMap; // Get the button UI elements. const centerMapButton = document.getElementById( 'btnCenterMap' ) as HTMLInputElement; const setCenterButton = document.getElementById( 'btnSetCenter' ) as HTMLInputElement; // Set up the click event listener for the 'Center Map' button. Set the map // to the currently stored center. centerMapButton.addEventListener('click', () => { const currentCenter = center; innerMap.setCenter(currentCenter); }); // Set up the click event listener for 'Set Center': Set the center of // the control to the current center of the map. setCenterButton.addEventListener('click', () => { const newCenter = innerMap.getCenter(); if (newCenter) { center = newCenter; } }); } void init();
JavaScript
let innerMap; const mapElement = document.querySelector('gmp-map'); let center = { lat: 41.85, lng: -87.65, }; async function init() { await google.maps.importLibrary('maps'); innerMap = mapElement.innerMap; // Get the button UI elements. const centerMapButton = document.getElementById('btnCenterMap'); const setCenterButton = document.getElementById('btnSetCenter'); // Set up the click event listener for the 'Center Map' button. Set the map // to the currently stored center. centerMapButton.addEventListener('click', () => { const currentCenter = center; innerMap.setCenter(currentCenter); }); // Set up the click event listener for 'Set Center': Set the center of // the control to the current center of the map. setCenterButton.addEventListener('click', () => { const newCenter = innerMap.getCenter(); if (newCenter) { center = newCenter; } }); } void init();