@Aslero

При скролле пропадает маркер и выскакивает ошибка?

Есть компонент

<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>


при скролле на карте выскакивает

64479b8c3ae49529538652.png
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы