74 lines
2.5 KiB
JavaScript
74 lines
2.5 KiB
JavaScript
ymaps.ready(function () {
|
||
|
||
var buildingCoordinates = [56.462317, 84.969289];
|
||
|
||
// Смещение карты, чтобы иконка была визуально по центру
|
||
var offsetCoefficient = 0.001;
|
||
|
||
var mapCenter = [
|
||
buildingCoordinates[0],
|
||
buildingCoordinates[1] - offsetCoefficient
|
||
];
|
||
|
||
var myMap = new ymaps.Map('map', {
|
||
center: mapCenter,
|
||
zoom: 17,
|
||
controls: []
|
||
});
|
||
|
||
// Отключаем все взаимодействия с картой
|
||
myMap.behaviors.disable(['scrollZoom', 'drag', 'multiTouch', 'dblClickZoom']);
|
||
|
||
// Создаем метку с серой дефолтной иконкой
|
||
var myPlacemark = new ymaps.Placemark(
|
||
buildingCoordinates,
|
||
{hintContent: '', balloonContent: ''},
|
||
{
|
||
preset: 'islands#greyIcon'
|
||
}
|
||
);
|
||
|
||
// Делаем карту черно-белой
|
||
myMap.panes.get('ground').getElement().style.filter = 'grayscale(100%)';
|
||
|
||
// Добавляем метку на карту
|
||
myMap.geoObjects.add(myPlacemark);
|
||
|
||
// Логика интерактивности карты остается без изменений
|
||
var isMapInteractive = false;
|
||
var mapElement = document.getElementById('map');
|
||
|
||
function activateMap(e) {
|
||
if (!isMapInteractive) {
|
||
myMap.behaviors.enable(['scrollZoom', 'drag', 'multiTouch', 'dblClickZoom']);
|
||
isMapInteractive = true;
|
||
|
||
setTimeout(function () {
|
||
document.addEventListener('click', deactivateMap);
|
||
document.addEventListener('touchend', deactivateMap);
|
||
}, 100);
|
||
|
||
e.stopPropagation();
|
||
}
|
||
}
|
||
|
||
function deactivateMap(e) {
|
||
var target = e.target;
|
||
|
||
if (e.type === 'touchend' || e.changedTouches || e.changedTouches[0]) {
|
||
var touch = e.changedTouches[0];
|
||
target = document.elementFromPoint(touch.clientX, touch.clientY);
|
||
}
|
||
|
||
if (!mapElement.contains(target)) {
|
||
myMap.behaviors.disable(['scrollZoom', 'drag', 'multiTouch', 'dblClickZoom']);
|
||
isMapInteractive = false;
|
||
|
||
document.removeEventListener('click', deactivateMap);
|
||
document.removeEventListener('touchend', deactivateMap);
|
||
}
|
||
}
|
||
|
||
mapElement.addEventListener('click', activateMap);
|
||
mapElement.addEventListener('touchstart', activateMap);
|
||
}); |