Подписка на события dom-элемента
Dom-элементы могут генерировать на себе различные типы событий в зависимости от браузера и устройства. Например, при наведении мышкой на объект может быть сгенерировано событие 'mousedown', а при нажатии на элемент пальцем на экране планшета - событие 'touchstart'. API Яндекс.Карт преобразует различные события браузеров в единый список событий. Таким образом, вы можете писать один и тот же код по обработке dom-событий во всех браузерах и устройствах, которые поддерживаются API.
Список событий, которыми оперирует API, и схему преобразования событий можно посмотреть в описании интерфейса IDomEventEmitter. Подписываться на события dom-элементов можно с помощью domEvent.manager.
index.html
dom_event_manager.js
<!DOCTYPE html>
<html>
<head>
<title>Подписка на события dom-элемента</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="dom_event_manager.js" type="text/javascript"></script>
<style type="text/css">
body {
font-family: Arial;
font-size: 14px;
}
#myElement {
height: 200px;
width: 200px;
display: flex;
align-items: center;
justify-content: center;
font-size: 200px;
cursor: default;
}
</style>
</head>
<body>
<h3>Погладь кота!</h3>
<div id="myElement">🐈</div>
<button id="clear">Очистить</button>
<div id="log"></div>
</body>
</html>
ymaps.ready(init);
function init() {
// Даже если пользователь коснется элемента на экране планшета, такие события, как
// 'touchstart', 'touchmove' и прочие, будут преобразованы в единый список событий.
// Это позволяет писать кроссплатформенный код и не задумываться о типе устройства.
var targetElement = document.getElementById("myElement"),
events = ["mouseenter", "mouseleave", "click", "dblclick", "wheel"],
divListeners = ymaps.domEvent.manager
.group(targetElement)
.add(events, function (event) {
log(event.get("type"));
});
document.getElementById("clear").onclick = function () {
document.getElementById("log").innerHTML = "";
};
window.log = function (message) {
document.getElementById("log").innerHTML =
document.getElementById("log").innerHTML + "<br>" + message;
};
}