JSFiddle - React, Tailwind, and code Playground
by vivalaakam
HTML
<div id="map"></div>
CSS
</style>
<script type="text/javascript" src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script>
<script type="text/javascript" src="https://yandex.st/jquery/1.8.0/jquery.min.js"></script>
<style>
html, body, #map {
width: 100%; height: 100%; padding: 0; margin: 0;
}
JavaScript
ymaps.ready(init);
function init () {
var map = new ymaps.Map('map', {
center: [55.650625, 37.62708],
zoom: 10
}),
counter = 0,
// Создание макета содержимого балуна.
// Макет создается с помощью фабрики макетов с помощью текстового шаблона.
BalloonContentLayout = ymaps.templateLayoutFactory.createClass(
'<div style="margin: 10px;">' +
'<b>{{options.name}}</b><br />' +
'<i id="count"></i> ' +
'<button id="counter-button"> +1 </button><div id="prev_counters"> </div>' +
'</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);
$('#prev_counters').append('<p>'+ counter +'</p>')
if (counter == 5) {
alert('Вы славно потрудились.');
counter = 0;
$('#count').html(counter);
}
}
...