vue3+高德地图,market事件绑定不生效问题解决方案

引言:一切以官方文档为主

准备工作:准备-地图 JS API 2.0|高德地图API (amap.com)

快速上手:快速上手-地图 JS API 2.0|高德地图API (amap.com)

那些害人的帖主不知道在哪学的  position: absolute; 

会导致canvas层级覆盖,进而导致内部dom无法交互

所以千万别给容器盒子用position: absolute; 改成固定高或者指定比例高即可

以下是一个demo代码,vue3的

<script setup lang="ts">
import AMapLoader from "@amap/amap-jsapi-loader";
import { onMounted, onUnmounted,ref  } from "vue";

let map: any = null;
const userLocation = ref<[number, number]>([116.397428, 39.90923]);

onMounted(() => {
  getUserLocation()
    .then(() => {
      AMapLoader.load({
        key: "XXXXXXXXXXXXX", // 申请好的Web端开发者Key,首次调用 load 时必填
        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        plugins: [], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
      })
        .then((AMap) => {
         let map = new AMap.Map("container", {
            viewMode: "3D", // 是否为3D地图模式
            zoom: 11, // 初始化地图级别
            center: userLocation.value, // 初始化地图中心点位置
          });
          
          let marker = new AMap.Marker({
            position: userLocation.value, //位置
            title: '当前位置',
            // draggable: true,
            zIndex:100
          }); 
          let onMarkerClick = function (e:any) {
            //e.target就是被点击的Marker
            console.log(111);
          }; 
          
          map.add(marker); //添加到地图
          marker.on("click", onMarkerClick); //绑定click事件
          console.log(marker);
        })
        .catch((e) => {
          console.log(e);
        });
    });
});

const getUserLocation = () =>
  new Promise<void>((resolve, reject) => {
    if (!navigator.geolocation) {
      reject(new Error("Geolocation is not supported by this browser."));
    } else {
      navigator.geolocation.getCurrentPosition(
        (position) => {
          userLocation.value = [ 
            position.coords.longitude,
            position.coords.latitude,
          ];
          resolve();
        },
        (error) => {
          reject(error);
        }
      );
    }
  });
 
onUnmounted(() => {
  map?.destroy();
})
</script>

<template>
  <div class="home_div">
    <div id="container"></div>
    </div>
</template>

<style scope>
    .home_div{
    }
    #container{
      width: 100vw;
      height: 100vh;
    }
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值