Настройка макета балуна метки
Макеты объектов можно создавать с помощью фабрики templateLayoutFactory, используя текстовые шаблоны.
В данном примере создается пользовательский макет балуна геообъекта. Макет задается геообъекту через опции.
index.html
placemark_balloon_layout.js
<!DOCTYPE html>
<html>
<head>
<title>Настройка макета балуна метки</title>
<meta
http-equiv="Content-Type"
content="text/html; charset=utf-8"
/>
<!--
Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
-->
<script
src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=<ваш API-ключ>"
type="text/javascript"
></script>
<script
src="https://yandex.st/jquery/2.2.3/jquery.min.js"
type="text/javascript"
></script>
<script
src="placemark_balloon_layout.js"
type="text/javascript"
></script>
<style>
html,
body,
#map {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
</style>
</head>
<body>
<div id="map"></div>
</body>
</html>
ymaps.ready(init);
function init() {
var map = new ymaps.Map(
"map",
{
center: [55.650625, 37.62708],
zoom: 10,
},
{
searchControlProvider: "yandex#search",
}
),
counter = 0,
// Создание макета содержимого балуна.
// Макет создается с помощью фабрики макетов с помощью текстового шаблона.
BalloonContentLayout = ymaps.templateLayoutFactory.createClass(
'<div style="margin: 10px;">' +
"<b>{{properties.name}}</b><br />" +
'<i id="count"></i> ' +
'<button id="counter-button"> +1 </button>' +
"</div>",
{
// Переопределяем функцию build, чтобы при создании макета начинать
// слушать событие click на кнопке-счетчике.
build: function () {
// Сначала вызываем метод build родительского класса.
BalloonContentLayout.superclass.build.call(this);
// А затем выполняем дополнительные действия.
$("#counter-button").bind("click", this.onCounterClick);
$("#count").html(counter);
},
// Аналогично переопределяем функцию clear, чтобы снять
// прослушивание клика при удалении макета с карты.
clear: function () {
// Выполняем действия в обратном порядке - сначала снимаем слушателя,
// а потом вызываем метод clear родительского класса.
$("#counter-button").unbind(
"click",
this.onCounterClick
);
BalloonContentLayout.superclass.clear.call(this);
},
onCounterClick: function () {
$("#count").html(++counter);
if (counter == 5) {
alert("Вы славно потрудились.");
counter = 0;
$("#count").html(counter);
}
},
}
);
var placemark = new ymaps.Placemark(
[55.650625, 37.62708],
{
name: "Считаем",
},
{
balloonContentLayout: BalloonContentLayout,
// Запретим замену обычного балуна на балун-панель.
// Если не указывать эту опцию, на картах маленького размера откроется балун-панель.
balloonPanelMaxMapArea: 0,
}
);
map.geoObjects.add(placemark);
}