Изменение параметров метки
В этом примере обрабатывается событие геообъекта - щелчок правой кнопкой мыши на метке, и отображется контекстное меню для управления его свойствами.
index.html
geoobject_contextmenu.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="geoobject_contextmenu.js"
type="text/javascript"
></script>
<style type="text/css">
html,
body {
width: 100%;
height: 95%;
margin: 0;
padding: 0;
font-family: Arial;
font-size: 14px;
}
#map {
width: 100%;
height: 95%;
}
#menu {
position: absolute;
width: 12em;
background: white;
border: 1px solid #ccc;
border-radius: 12px;
padding-bottom: 10px;
z-index: 2;
}
#menu ul {
list-style-type: none;
padding: 20px;
margin: 0;
}
input {
width: 10em;
}
.header {
padding: 5px;
}
</style>
</head>
<body>
<p class="header">Вызовите контекстное меню на метке</p>
<div id="map"></div>
</body>
</html>
ymaps.ready(init);
function init() {
// Создаем карту.
var myMap = new ymaps.Map(
"map",
{
center: [47.6, 41.8],
zoom: 9,
},
{
searchControlProvider: "yandex#search",
}
);
// Создаем метку.
var myPlacemark = new ymaps.Placemark(
[47.6, 42.1],
{
iconContent: "Щелкни по мне правой кнопкой мыши!",
},
{
// Красная иконка, растягивающаяся под содержимое.
preset: "islands#redStretchyIcon",
}
);
// Контекстное меню, позволяющее изменить параметры метки.
// Вызывается при нажатии правой кнопкой мыши на метке.
myPlacemark.events.add("contextmenu", function (e) {
// Если меню метки уже отображено, то убираем его.
if ($("#menu").css("display") == "block") {
$("#menu").remove();
} else {
// HTML-содержимое контекстного меню.
var menuContent =
'<div id="menu">\
<ul id="menu_list">\
<li>Название: <br /> <input type="text" name="icon_text" /></li>\
<li>Подсказка: <br /> <input type="text" name="hint_text" /></li>\
<li>Балун: <br /> <input type="text" name="balloon_text" /></li>\
</ul>\
<div align="center"><input type="submit" value="Сохранить" /></div>\
</div>';
// Размещаем контекстное меню на странице
$("body").append(menuContent);
// Задаем позицию меню.
$("#menu").css({
left: e.get("pagePixels")[0],
top: e.get("pagePixels")[1],
});
// Заполняем поля контекстного меню текущими значениями свойств метки.
$('#menu input[name="icon_text"]').val(
myPlacemark.properties.get("iconContent")
);
$('#menu input[name="hint_text"]').val(
myPlacemark.properties.get("hintContent")
);
$('#menu input[name="balloon_text"]').val(
myPlacemark.properties.get("balloonContent")
);
// При нажатии на кнопку "Сохранить" изменяем свойства метки
// значениями, введенными в форме контекстного меню.
$('#menu input[type="submit"]').click(function () {
myPlacemark.properties.set({
iconContent: $('input[name="icon_text"]').val(),
hintContent: $('input[name="hint_text"]').val(),
balloonContent: $('input[name="balloon_text"]').val(),
});
// Удаляем контекстное меню.
$("#menu").remove();
});
}
});
myMap.geoObjects.add(myPlacemark);
}