Загрузка модуля по требованию
В данном примере при инициализации загружаются только модули карты и кнопки.
По клику кнопки происходит загрузка модуля метки.
Загрузку отдельных модулей можно производить при помощи метода require модульной системы.
Метод возвращет объект-обещание, который подтверждается массивом запрошенных модулей.
Для удобства в примере используется метод spread, который передает в функцию данные в виде списка аргументов, а не в виде массива.
API Яндекс.Карт состоит из большого количества взаимосвязанных модулей.
По умолчанию при подключении API происходит загрузка стандартного набора модулей (package.full), который включает в себя все необходимое для работы API.
Для сокращения объема загружаемого кода API можно подключать некоторые модули вместо стандартного набора.
Это можно сделать, указав необходимые модули в GET-параметре load. Модули перечисляются через запятую.
Если GET-параметр load не указан, то просходит загрузка package.full.
Подробнее о работе модулей смотрите в разделе Модули.
По клику кнопки происходит загрузка модуля метки.
Загрузку отдельных модулей можно производить при помощи метода require модульной системы.
Метод возвращет объект-обещание, который подтверждается массивом запрошенных модулей.
Для удобства в примере используется метод spread, который передает в функцию данные в виде списка аргументов, а не в виде массива.
API Яндекс.Карт состоит из большого количества взаимосвязанных модулей.
По умолчанию при подключении API происходит загрузка стандартного набора модулей (package.full), который включает в себя все необходимое для работы API.
Для сокращения объема загружаемого кода API можно подключать некоторые модули вместо стандартного набора.
Это можно сделать, указав необходимые модули в GET-параметре load. Модули перечисляются через запятую.
Если GET-параметр load не указан, то просходит загрузка package.full.
Подробнее о работе модулей смотрите в разделе Модули.
index.html
module_request.js
<!DOCTYPE html>
<html>
<head>
<title>Загрузка модуля по требованию</title>
<meta
http-equiv="Content-Type"
content="text/html; charset=utf-8"
/>
<!--
При помощи GET параметра load можно перечислить необходимые модули API Яндекс.Карт.
Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
-->
<script
src="https://api-maps.yandex.ru/2.1/?load=Map,control.Button&lang=ru_RU&apikey=<ваш API-ключ>"
type="text/javascript"
></script>
<script src="module_request.js" type="text/javascript"></script>
<style>
html,
body,
#map {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
</body>
</html>
ymaps.ready(function () {
var myMap = new ymaps.Map("map", {
center: [55.755381, 37.619044],
zoom: 7,
// Не отображаем на карте никакие стандартные элементы управления, так как они не были загружены.
controls: [],
});
var loadControl = new ymaps.control.Button({
data: { content: "Добавить метку" },
options: { maxWidth: 200, float: "right", selectOnClick: false },
});
myMap.controls.add(loadControl);
loadControl.events.add("click", function () {
if (ymaps.Placemark) {
// Если модуль уже был загружен, то нет необходимости повторно обращаться к модульной системе.
addPlacemark();
} else {
// Загружаем по требованию класс метки и оверлея метки.
// По умолчанию оверлей автоматически загружается после добавления метки на карту.
// В данном примере происходит асинхронная загрузка самого модуля метки и нет необходимости в отдельной подгрузке оверлея.
ymaps.modules
.require(["Placemark", "overlay.Placemark"])
.spread(function (Placemark, PlacemarkOverlay) {
// Добавляем в глобальную область видимости класс вручную,
// так как при использовании метода require модульной системы этого не происходит.
ymaps.Placemark = Placemark;
addPlacemark();
});
}
});
function addPlacemark() {
var center = myMap.getCenter();
// Устанавливаем случайную позицию, близкую к центру карты.
center[0] += Math.random() * 2 - 1;
center[1] += Math.random() * 2 - 1;
var placemark = new ymaps.Placemark(center);
myMap.geoObjects.add(placemark);
}
});