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
相关产品推荐
相关产品推荐

