Обзор элементов управления
Карты, отображаемые через Maps JavaScript API, содержат элементы пользовательского интерфейса, позволяющие пользователю взаимодействовать с картой. Эти элементы известны как элементы управления , и вы можете включать варианты этих элементов управления в свое приложение. Альтернативно вы можете ничего не делать и позволить Maps JavaScript API обрабатывать все действия элементов управления.
На следующей карте показан набор элементов управления по умолчанию, отображаемый Maps JavaScript API:
Ниже приведен список полного набора элементов управления, которые вы можете использовать на своих картах:
- Элемент управления масштабированием отображает кнопки «+» и «-» для изменения уровня масштабирования карты. Этот элемент управления по умолчанию отображается в правом нижнем углу карты.
- Элемент управления «Камера» имеет элементы управления масштабированием и панорамированием и отображается по умолчанию вместо элемента управления масштабированием при использовании бета-канала .
- Элемент управления «Тип карты» доступен в виде раскрывающегося списка или горизонтальной панели кнопок, что позволяет пользователю выбрать тип карты (
ROADMAP
,SATELLITE
,HYBRID
илиTERRAIN
). Этот элемент управления по умолчанию отображается в верхнем левом углу карты. - Элемент управления Просмотром улиц содержит значок человечка, который можно перетащить на карту, чтобы включить Просмотр улиц. Этот элемент управления по умолчанию отображается в правом нижнем углу карты.
- Элемент управления «Поворот» обеспечивает комбинацию параметров наклона и поворота для карт, содержащих наклонные изображения. Этот элемент управления по умолчанию отображается в правом нижнем углу карты. Для получения дополнительной информации см. изображения под углом 45° .
- Элемент управления «Масштаб» отображает элемент масштаба карты. По умолчанию этот элемент управления отключен.
- Элемент управления «Полноэкранный режим» предлагает возможность открыть карту в полноэкранном режиме. Этот элемент управления включен по умолчанию на настольных компьютерах и мобильных устройствах. Примечание. iOS не поддерживает полноэкранный режим. Поэтому полноэкранный элемент управления не виден на устройствах iOS.
- Элемент управления «Сочетания клавиш» отображает список сочетаний клавиш для взаимодействия с картой.
Вы не получаете доступ к этим элементам управления картой и не изменяете их напрямую. Вместо этого вы изменяете поля MapOptions
карты, которые влияют на видимость и представление элементов управления. Вы можете настроить представление элементов управления при создании экземпляра карты (с помощью соответствующих MapOptions
) или динамически изменить карту, вызвав setOptions()
для изменения параметров карты.
Не все эти элементы управления включены по умолчанию. Чтобы узнать о поведении пользовательского интерфейса по умолчанию (и о том, как изменить такое поведение), см. раздел «Пользовательский интерфейс по умолчанию» ниже.
Пользовательский интерфейс по умолчанию
По умолчанию все элементы управления исчезают, если карта слишком мала (200x200 пикселей). Вы можете переопределить это поведение, явно установив видимость элемента управления. См. Добавление элементов управления на карту .
Поведение и внешний вид элементов управления одинаковы на мобильных и настольных устройствах, за исключением полноэкранного элемента управления (см. поведение, описанное в списке элементов управления ).
Кроме того, обработка клавиатуры включена по умолчанию на всех устройствах.
Отключить пользовательский интерфейс по умолчанию
Возможно, вы захотите полностью отключить кнопки пользовательского интерфейса API по умолчанию. Для этого установите для свойства disableDefaultUI
карты (внутри объекта MapOptions
) значение true
. Это свойство отключает все кнопки управления пользовательским интерфейсом из Maps JavaScript API. Однако это не влияет на жесты мыши или сочетания клавиш на базовой карте, которые управляются свойствами gestureHandling
и keyboardShortcuts
соответственно.
Следующий код отключает кнопки пользовательского интерфейса:
Машинопись
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 | Да |
>= 200x200 пикселей | undefined | Да |
< 200x200 пикселей | undefined | Нет |
В следующем примере карта задается так, чтобы скрыть элемент управления «Масштаб» и отобразить элемент управления «Масштаб». Обратите внимание, что мы не отключаем явно пользовательский интерфейс по умолчанию, поэтому эти изменения дополняют поведение пользовательского интерфейса по умолчанию.
Машинопись
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 } ...
В следующем примере показано, как изменить положение и стиль элементов управления по умолчанию.
Машинопись
// 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;
Попробуйте образец
Элементы управления обычно настраиваются при создании карты. Однако вы можете динамически изменять представление элементов управления, вызывая метод setOptions()
Map
и передавая ему новые параметры управления.
Изменить элементы управления
Вы указываете представление элемента управления при создании карты с помощью полей в объекте карты MapOptions
. Эти поля обозначены ниже:
-
zoomControl
включает/отключает управление масштабированием. По умолчанию этот элемент управления видим и отображается в правом нижнем углу карты. ПолеzoomControlOptions
дополнительно указываетZoomControlOptions
который будет использоваться для этого элемента управления. -
cameraControl
включает/отключает управление камерой. Этот элемент управления по умолчанию виден на картах, использующих бета-канал . ПолеcameraControlOptions
дополнительно указываетCameraControlOptions
который будет использоваться для этого элемента управления. -
mapTypeControl
включает/отключает элемент управления «Тип карты», который позволяет пользователю переключаться между типами карт (например, «Карта» и «Спутник»). По умолчанию этот элемент управления видим и отображается в верхнем левом углу карты. ПолеmapTypeControlOptions
дополнительно указываетMapTypeControlOptions
который будет использоваться для этого элемента управления. -
streetViewControl
включает/отключает элемент управления человечком, который позволяет пользователю активировать панораму Street View. По умолчанию этот элемент управления видим и отображается в правом нижнем углу карты. ПолеstreetViewControlOptions
дополнительно указываетStreetViewControlOptions
который будет использоваться для этого элемента управления. -
rotateControl
включает/отключает появление элемента управления Rotate для управления ориентацией изображений под углом 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). В этих случаях элементы управления будут действовать в соответствии с логикой, указанной для каждой позиции, и будут отображаться как можно ближе к указанному положению.
В следующем примере показана простая карта со всеми включенными элементами управления в разных положениях.
Машинопись
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 для отображаемых элементов управления.
- Обрабатывайте взаимодействие с пользователем или картой с помощью обработчиков событий для изменения свойств карты или пользовательских событий (например, событий
'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
элемента управления отрицательное значение. Пользовательские элементы управления не могут быть размещены слева от логотипа или справа от авторских прав.
Следующий код создает новый пользовательский элемент управления (его конструктор не показан) и добавляет его на карту в позицию 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);
Пример пользовательского элемента управления
Следующий элемент управления прост (хотя и не особенно полезен) и сочетает в себе шаблоны, показанные выше. Этот элемент управления реагирует на события 'click'
DOM, центрируя карту в определенном месте по умолчанию:
Машинопись
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_
внутри элемента управления для хранения этого состояния и предоставления методов получения и установки для этого состояния.
Машинопись
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;