You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React使用@here/maps-api-for-javascript v1.30.4缺失属性问题咨询

HERE Maps API v1.30.4 拖拽Marker相关问题解决方案

问题1:Marker/DomMarker 不存在draggable属性

v1.30.4版本的HERE Maps API未将draggable作为Marker/DomMarker的构造参数公开属性,部分较早的公开示例沿用了旧版本的构造参数写法,和该版本实际实现存在差异,你可以按以下步骤启用拖拽:

  • 首先确保已正确初始化H.mapevents.MapEvents和H.mapevents.Behavior模块,这是所有地图交互事件的基础
  • Marker/DomMarker实例创建完成后,单独调用实例的setDraggable(true)方法即可启用拖拽能力

问题2:H.util.Event 不存在target属性

该版本的事件对象没有target字段,你可以使用currentTarget字段获取绑定事件的对应Marker/DomMarker实例,该字段指向你调用addEventListener的目标对象,完全可以满足获取绑定对象的需求。

参考代码示例

import React, { useEffect, useRef } from 'react';

// 此处已完成@here/maps-api-for-javascript的加载和H对象初始化
const MapComponent = () => {
  const mapContainerRef = useRef(null);
  const markerRef = useRef(null);

  useEffect(() => {
    if (!mapContainerRef.current) return;
    // 初始化地图实例
    const map = new H.Map(mapContainerRef.current, 你的默认图层实例, {
      zoom: 10,
      center: { lat: 39.9042, lng: 116.4074 }
    });
    // 初始化地图交互模块
    const mapEvents = new H.mapevents.MapEvents(map);
    new H.mapevents.Behavior(mapEvents);

    // 创建Marker实例
    const marker = new H.map.Marker({ lat: 39.9042, lng: 116.4074 });
    // 启用拖拽
    marker.setDraggable(true);
    markerRef.current = marker;

    // 绑定拖拽事件
    marker.addEventListener('dragend', (e) => {
      // 获取事件绑定的Marker实例
      const targetMarker = e.currentTarget;
      // 可直接获取拖拽后的坐标、自定义绑定的业务数据
      const newPosition = targetMarker.getGeometry();
      console.log('拖拽后坐标:', newPosition.lat, newPosition.lng);
    });

    map.addObject(marker);
  }, []);

  return <div ref={mapContainerRef} style={{ width: '100%', height: '600px' }} />;
};

内容的提问来源于stack exchange,提问作者Arther

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:48:00