Omówienie ustawień
Mapy wyświetlane za pomocą interfejsu Maps JavaScript API zawierają interfejs użytkownika które umożliwiają użytkownikowi interakcję z mapą. Te elementy nazywamy kontrolkami i możesz uwzględnić ich różne wersje w swojej aplikacji. Możesz też nie robić nic i pozostawić wszystkie działania kontrolne do interfejsu Maps JavaScript API.
Poniższa mapa przedstawia domyślny zestaw elementów sterujących wyświetlany Maps JavaScript API:
Poniżej znajduje się lista wszystkich opcji, których możesz używać w swoich mapach:
- Element sterujący powiększenia wyświetla znak „+” i „-” Przyciski do zmiany poziomu powiększenia mapy. Ten element sterujący jest domyślnie widoczny w prawym dolnym rogu mapy.
- Sterowanie aparatem obejmuje oba powiększenie i przesuwania. Jest on domyślnie wyświetlany zamiast elementu sterującego powiększeniem podczas korzystania wersji beta.
- Ustawienie typu mapy jest dostępne w menu.
lub poziomy paska z przyciskami, co pozwala użytkownikowi wybrać typ mapy
(
ROADMAP
,SATELLITE
,HYBRID
lubTERRAIN
). Ten element sterujący pojawia się domyślnie w lewym górnym rogu w rogu mapy. - Element sterujący Street View zawiera ikonę Pegmana, którą można przeciągnąć na mapę, aby włączyć Street View. To ustawienie jest domyślnie widoczne w prawym dolnym rogu mapy.
- Ustawienia obracania umożliwiają połączenie opcji nachylenia i obracania w przypadku map zawierających obrazy pochylone. Ten element sterujący jest domyślnie widoczny w prawym dolnym rogu mapy. Więcej informacji znajdziesz w artykule o zapisach w formacie 45°.
- Element sterujący skalą wyświetla element skali mapy. Ta opcja jest domyślnie wyłączona.
- Element sterujący trybem pełnoekranowym umożliwia otwarcie mapy w trybie pełnoekranowym. Ta opcja jest domyślnie włączona na komputerach i urządzeniach mobilnych. Uwaga: iOS nie obsługuje funkcji pełnego ekranu. Sterowanie trybem pełnoekranowym jest więc niewidoczne na urządzeniach z iOS.
- Skróty klawiszowe zawierają listę skrótów klawiszowych do interakcji z mapą.
Nie masz bezpośredniego dostępu do tych elementów mapy ani nie możesz ich modyfikować. Zamiast tego:
zmień pola MapOptions
mapy, które wpływają na widoczność
i sposobu prezentacji elementów sterujących. Możesz dostosować prezentację kontrolną na
Utworzenie instancji mapy (przy użyciu odpowiednich MapOptions
) lub zmodyfikowanie
dynamicznie, wywołując funkcję setOptions()
, aby zmienić
.
Nie wszystkie z tych ustawień są domyślnie włączone. Aby dowiedzieć się więcej o domyślnym interfejsie użytkownika działania użytkowników (oraz sposobów ich zmodyfikowania), można znaleźć w sekcji Domyślny interfejs poniżej.
Domyślne UI
Domyślnie wszystkie elementy sterujące znikają, jeśli mapa jest zbyt mała (200 x 200 pikseli). Możesz zastąpić to zachowanie, ustawiając wartość elementu sterującego jako widoczne. Zobacz dodawanie elementów sterujących do mapy.
Działanie i wygląd elementów sterujących są takie same na urządzeniach mobilnych komputerach, z wyjątkiem elementów sterujących na pełnym ekranie (zobacz opisane na liście dostępnych elementów sterujących).
Ponadto obsługa klawiatury jest domyślnie włączona na wszystkich urządzeniach.
Wyłączanie domyślnego interfejsu
Możesz chcieć całkowicie wyłączyć domyślne przyciski interfejsu API. Aby to zrobić:
ustaw właściwość disableDefaultUI
mapy (w sekcji
MapOptions
) do true
. Ta usługa
wyłącza wszystkie przyciski sterujące UI z interfejsu Maps JavaScript API. Nie wpływa jednak na gesty myszy ani skróty klawiszowe na mapie podstawowej, które są kontrolowane odpowiednio przez właściwości gestureHandling
i keyboardShortcuts
.
Ten kod wyłącza przyciski interfejsu:
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;
Zobacz próbkę
Dodawanie elementów sterujących do mapy
Możesz dostosować interfejs, usuwając, dodając lub modyfikując zachowanie lub elementy interfejsu. Zadbaj też o to, aby przyszłe aktualizacje nie zmieniały tego zachowania. Jeśli chcesz tylko dodać lub zmienić dotychczasowy sposób działania, musisz upewnij się, że element sterujący jest wyraźnie dodany do aplikacji.
Niektóre elementy sterujące domyślnie pojawiają się na mapie, a inne nie
chyba że wyraźnie o to poprosisz. dodawania i usuwania opcji w sekcji
mapa jest określona w następującym obiekcie MapOptions
ustawione na true
, by były widoczne lub ustawione jako
false
, aby je ukryć:
{ zoomControl: boolean, 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 zachowanie, ustawiając wartość elementu sterującego jako
widoczne. Na przykład w tabeli poniżej pokazujemy, czy element sterujący powiększeniem jest
czy nie, zależnie od rozmiaru mapy i ustawień
Pole zoomControl
:
Rozmiar mapy | zoomControl |
Widoczne? |
---|---|---|
Dowolny | false |
Nie |
Dowolny | true |
Tak |
>= 200 x 200 pikseli | undefined |
Tak |
< 200 x 200 pikseli | undefined |
Nie |
Ten przykład ustawia mapę tak, aby ukryto powiększenie i wyświetl kontrolkę Skala. Pamiętaj, że nie wyłączamy domyślnego interfejsu użytkownika, więc te modyfikacje są dodatkiem do domyślnego zachowania interfejsu.
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;
Zobacz próbkę
Opcje sterowania
Niektóre opcje można konfigurować, aby zmienić ich działanie lub wygląd. Na przykład element sterujący Type map może mieć postać poziomego paska lub menu.
Te ustawienia są zmodyfikowane przez zmianę odpowiednich opcji ustawień.
w obiekcie MapOptions
po utworzeniu mapy.
Na przykład opcje zmiany ustawienia Typ mapy są podane w
mapTypeControlOptions
. Element sterujący Typ mapy może się wyświetlać w jednej z tych opcji:style
google.maps.MapTypeControlStyle.HORIZONTAL_BAR
wyświetla seria elementów sterujących w postaci przycisków na poziomym pasku, jak widać w Google. Mapy.google.maps.MapTypeControlStyle.DROPDOWN_MENU
wyświetla element sterujący umożliwiający wybór typu mapy za pomocą menu rozwijanego .google.maps.MapTypeControlStyle.DEFAULT
wyświetla działanie domyślne, które zależy od rozmiaru ekranu i może się zmienić w przyszłości. jak i w przypadku różnych wersji interfejsu API.
Pamiętaj, że jeśli zmodyfikujesz opcje sterowania, musisz je też włączyć, ustawiając odpowiednią wartość MapOptions
na true
. Aby na przykład ustawić kontrolkę Typ mapy na wyświetlanie stylu DROPDOWN_MENU
, użyj tego kodu w obiekcie MapOptions
:
... mapTypeControl: true, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.DROPDOWN_MENU } ...
W tym przykładzie pokazujemy, jak zmienić domyślną pozycję i styl elementów sterujących.
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;
Wypróbuj próbkę
Ustawienia są zwykle konfigurowane podczas tworzenia mapy. Możesz jednak dynamicznie zmieniać sposób wyświetlania elementów sterujących, wywołując metodę Map
setOptions()
, przekazując jej nowe opcje sterowania.
Modyfikuj elementy sterujące
Prezentację kontrolera określasz podczas tworzenia mapy za pomocą pól w obiekcie MapOptions
mapy. Te
pola są oznaczone poniżej:
zoomControl
włącza lub wyłącza kontrolę powiększenia. Domyślnie ten element sterujący jest widoczny i widoczny w prawym dolnym rogu mapy. PolezoomControlOptions
dodatkowo określa,ZoomControlOptions
jakie ustawienie ma być używane w przypadku tego kontrolera.cameraControl
włącza/wyłącza sterowanie kamerą. To ustawienie jest domyślnie widoczne na mapach używających kanału beta. PolecameraControlOptions
dodatkowo określa parametrCameraControlOptions
który ma być używany na potrzeby tego elementu sterującego.mapTypeControl
włącza/wyłącza kontrolę Typ mapy, która umożliwia użytkownikowi przełączanie się między typami map (np. mapą i mapą satelitarną). Domyślnie ten element sterujący jest widoczny i znajduje się w lewym górnym rogu w rogu mapy. PolemapTypeControlOptions
dodatkowo określa wartośćMapTypeControlOptions
, która ma być używana w przypadku tego ustawienia.streetViewControl
włącza/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 znajduje się w prawym dolnym rogu pozycję na mapie. PolestreetViewControlOptions
dodatkowo określaStreetViewControlOptions
który ma być używany na potrzeby tego elementu sterującego.rotateControl
włącza lub wyłącza opcję obracania, która służy do kontrolowania orientacji obrazów w zakresie 45°. Domyślnie obecność kontrolki zależy od tego, czy w przypadku danego typu mapy w bieżącym powiększeniu i przy bieżącej lokalizacji są dostępne zdjęcia o rozdzielczości 45°. Możesz zmienić działanie kontrolki, ustawiając mapęrotateControlOptions
, aby określićRotateControlOptions
, której chcesz użyć. Nie można wyświetlić elementu sterującego, jeśli nie są dostępne zdjęcia pod kątem 45°.scaleControl
włącza/wyłącza ustawienie skali, które zapewnia skalę mapy. Domyślnie ten element sterujący jest niewidoczny. Kiedy włączona, będzie zawsze wyświetlana w prawym dolnym rogu mapy.scaleControlOptions
dodatkowo określaScaleControlOptions
który ma być używany na potrzeby tego elementu sterującego.fullscreenControl
włą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. Po włączeniu pojawi się element sterujący w prawym górnym rogu mapy.fullscreenControlOptions
dodatkowo określaFullscreenControlOptions
, którego należy użyć w przypadku tego elementu sterującego.
Pamiętaj, że możesz określić opcje ustawień, które zostaną początkowo wyłączone.
Sterowanie pozycjonowaniem
Większość opcji 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 nie jest stałe. Zamiast tego:
interfejs API inteligentnie ułoży elementy sterujące,
istniejących elementów mapy lub innych elementów sterujących, bez ograniczeń (np.
rozmiar mapy).
Uwaga: nie możemy zagwarantować, że elementy sterujące nie będą nakładać się na siebie w przypadku skomplikowanych układów, ale interfejs API będzie próbował je rozmieścić w inteligentny sposób.
Obsługiwane są te pozycje sterowania:
TOP_CENTER
oznacza, że element sterujący powinien zostać umieszczony na środku u góry mapy.TOP_LEFT
oznacza, że element sterujący powinien być umieszczony wzdłuż w lewym górnym rogu mapy z „pływającymi” elementami podrzędnymi elementu sterującego w stronę środka u góry.TOP_RIGHT
oznacza, że element sterujący powinien być umieszczony wzdłuż w prawym górnym rogu mapy z „pływającymi” elementami podrzędnymi elementu sterującego w stronę środka u góry.LEFT_TOP
oznacza, że element sterujący powinien być umieszczony wzdłuż w lewym górnym rogu mapy, ale pod wszelkimi elementamiTOP_LEFT
.RIGHT_TOP
oznacza, że element sterujący powinien być umieszczony wzdłuż w prawym górnym rogu mapy, ale pod dowolnym elementemTOP_RIGHT
.LEFT_CENTER
oznacza, że element sterujący powinien zostać umieszczony po lewej stronie mapy, wyśrodkowany międzyTOP_LEFT
iBOTTOM_LEFT
pozycji.RIGHT_CENTER
wskazuje, że element sterujący powinien znajdować się po prawej stronie mapy, na środku między pozycjamiTOP_RIGHT
iBOTTOM_RIGHT
.LEFT_BOTTOM
oznacza, że element sterujący powinien zostać umieszczony w lewym dolnym rogu mapy, ale nad dowolnymiBOTTOM_LEFT
.RIGHT_BOTTOM
oznacza, że element sterujący powinien znajdować się w prawym dolnym rogu mapy, ale nad elementamiBOTTOM_RIGHT
.BOTTOM_CENTER
oznacza, że element sterujący powinien zostać umieszczony na środku u dołu mapy.BOTTOM_LEFT
oznacza, że element sterujący powinien zostać umieszczony w lewym dolnym rogu mapy z wszelkimi podelementami elementu sterującego „pływający” w stronę dolnej części ekranu.BOTTOM_RIGHT
oznacza, że element sterujący powinien zostać umieszczony w prawym dolnym rogu mapy z wszelkimi podelementami elementu sterującego „pływający” w stronę dolnej części ekranu.
Pamiętaj, że te pozycje mogą pokrywać się z pozycjami elementów interfejsu użytkownika, których nie możesz modyfikować (np. praw autorskich i logo Google). W takich przypadkach elementy sterujące będą działać zgodnie z logiką określoną w następujących przypadkach: i wyświetlają się jak najbliżej pozycji.
Ten przykład pokazuje prostą mapę ze wszystkimi elementami sterującymi w różnych pozycjach.
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;
Wypróbuj próbkę
Ustawienia niestandardowe
Oprócz modyfikowania stylu i pozycji dotychczasowych elementów sterujących interfejsu API możesz tworzyć własne elementy sterujące, aby obsługiwać interakcje z użytkownikiem. Elementy sterujące
są nieruchomymi widżetami unoszącymi się na mapie w pozycji bezwzględnej, jak
w przeciwieństwie do nakładek, które przesuwają się razem z mapą bazową. Najogólniej rzecz ujmując, element sterujący to element <div>
, który ma pozycję bezwzględną na mapie, wyświetla użytkownikowi interfejs i obsługuje interakcje z użytkownikiem lub mapą, zwykle za pomocą modułu obsługi zdarzeń.
Do utworzenia własnego elementu sterującego potrzeba kilku reguł. Jednak za sprawdzone metody mogą skorzystać następujące wskazówki:
- Określ odpowiedni CSS dla elementów sterujących, które mają się wyświetlać.
- Interakcja z użytkownikiem lub mapą za pomocą modułów obsługi zdarzeń
zmiany usługi mapy lub zdarzenia użytkownika (np.
'click'
. - Utwórz element
<div>
, aby przechowywać kontroler, i dodaj ten element do właściwościcontrols
elementuMap
.
Poniżej omawiamy każdy z tych problemów.
Rysowanie elementów sterujących niestandardowych
Sposób rysowania elementów sterujących zależy od Ciebie. Zasadniczo zalecamy umieszczenie wszystkich elementów sterowania w jednym elemencie <div>
, aby można było nimi manipulować jako jedną jednostkę. Użyjemy tego wzorca w przykładach pokazanych poniżej.
Projektowanie atrakcyjnych elementów sterujących wymaga pewnej wiedzy na temat CSS i struktury DOM. Poniższy kod przedstawia funkcję tworzenia przycisku który przesuwa mapę tak, że jest wyśrodkowana na 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; }
Obsługa zdarzeń pochodzących z ustawień niestandardowych
Aby element sterujący był przydatny, musi faktycznie coś zrobić. Co do kontroli
zależy od Ciebie. Element sterujący może reagować na dane wejściowe użytkownika lub na zmiany stanu Map
.
Aby odpowiadać na dane wejściowe użytkownika, używaj zasady addEventListener()
, która obsługuje obsługiwane zdarzenia DOM. Ten fragment kodu dodaje detektor dla zdarzenia 'click'
przeglądarki. Zwróć uwagę, że to zdarzenie jest odbierane z interfejsu 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); });
Udostępnianie ustawień niestandardowych
Aby zapewnić, że elementy sterujące będą otrzymywać zdarzenia klawiatury i prawidłowo wyświetlać się w czytnikach ekranu:
- W przypadku przycisków, elementów formularzy i etykiet zawsze używaj natywnych elementów HTML. Element DIV należy używać tylko jako kontenera do przechowywania elementów natywnych. Nigdy nie przekształcaj elementu DIV w interaktywny element interfejsu.
- Aby przekazać informacje o elemencie interfejsu użytkownika, użyj elementu
label
, atrybututitle
lub atrybutuaria-label
.
Pozycjonowanie elementów sterujących niestandardowych
Niestandardowe elementy sterujące są umieszczane na mapie w odpowiednich miejscach
położenia w controls
obiektu Map
usłudze. Ta właściwość zawiera tablicę funkcji
google.maps.ControlPosition
Dodaje się je do mapy, dodając element Node
(zazwyczaj <div>
) do odpowiedniego elementu ControlPosition
. (informacje o tych pozycjach znajdziesz powyżej w sekcji sterowanie pozycjonowaniem).
Każdy element ControlPosition
przechowuje MVCArray
elementów sterowania wyświetlanych na tej pozycji. W efekcie, gdy dodasz lub usuniesz elementy sterujące z pozycji, interfejs API odpowiednio je zaktualizuje.
Interfejs API umieszcza elementy sterujące na każdej pozycji według
właściwość index
; elementy sterujące o niższym indeksie są umieszczane jako pierwsze.
Na przykład 2 elementy sterujące niestandardowe na pozycji BOTTOM_RIGHT
zostaną rozmieszczone zgodnie z kolejnością indeksu, a wartości o niższym indeksie mają pierwszeństwo. Domyślnie wszystkie niestandardowe elementy sterujące są umieszczane po umieszczeniu
wszystkich domyślnych ustawieniach interfejsu API. Możesz zastąpić to zachowanie, ustawiając parametr
właściwości index
elementu sterującego na wartość ujemną. Ustawienia niestandardowe
nie może znajdować się po lewej stronie logo ani po prawej stronie
prawa autorskie.
Poniższy kod tworzy nowy element niestandardowy (jego konstruktor nie jest widoczny) i dodaje go do mapy w pozycji 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);
Przykład niestandardowego elementu sterującego
Poniższe ustawienie jest proste (choć niezbyt przydatne) oraz
łączy wzory pokazane powyżej. Ten element sterujący reaguje na DOM
'click'
zdarzeń z określonym domyślnym wyśrodkowaniem mapy
lokalizacja:
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;
Zobacz próbkę
Dodawanie stanu do elementów sterujących
Elementy sterujące mogą również zapisywać stan. Poniższy przykład jest podobny do tego.
wyświetlane wcześniej, ale element sterujący zawiera dodatkową opcję „Ustaw dom” który
ustawia opcję wyświetlania nowej lokalizacji domu. Aby to zrobić, tworzymy w elementach home_
właściwość do przechowywania tego stanu oraz metody get i set do jego ustawiania.
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;