Есть компонент
<script setup lang="ts">
import _ from 'lodash';
import { onMounted, ref, defineProps, PropType, watch } from 'vue';
import { YM_DEFAULT_CENTER } from '@/shared/constants';
const emits = defineEmits(['click']);
const props = defineProps({
location: {
type: Array as PropType<number[]>,
default: YM_DEFAULT_CENTER,
},
});
const mapCenter = ref(YM_DEFAULT_CENTER);
const map = ref();
const marker = ref();
function initMap() {
ymaps.ready(() => {
map.value = new ymaps.Map(
'map',
{
center: mapCenter.value,
zoom: 14,
},
{
suppressMapOpenBlock: true,
suppressObsoleteBrowserNotifier: true,
}
);
map.value.events.add('click', (e: any) => {
console.log(e.get('coords'));
emits('click', e.get('coords'));
});
});
}
function setCenter(center: any, zoom = null) {
mapCenter.value = center;
ymaps.ready(() => {
map.value && map.value.setCenter(center);
if (zoom) {
map.value && map.value.setZoom(zoom);
}
});
}
function _setMarker(location: number[]) {
if (!location[0] || !location[1]) {
return false;
}
ymaps.ready(() => {
if (!marker.value) {
marker.value = new ymaps.Placemark(location);
marker.value.name = 'Ваше местоположение';
map.value.geoObjects.add(marker.value);
} else {
marker.value.geometry.setCoordinates(location);
}
});
setCenter(location);
return true;
}
watch(
props.location,
_.debounce(() => _setMarker(props.location), 100),
{ immediate: true }
);
onMounted(() => {
initMap();
});
</script>
<template>
<div class="map-container">
<div
id="map"
class="w-full h-96"
ref="map"></div>
</div>
</template>
при скролле на карте выскакивает