javascript - 如何使 reat-mapbox-gl 标记组件可拖动?
问题描述
我正在使用https://github.com/alex3165/react-mapbox-gl
我的问题是如何使标记组件可拖动?
<Map
id='map'
style="mapbox://styles/mapbox/streets-v11"
center={[locationInputs.lon, locationInputs.lat]}
containerStyle={{ height: '500px', width: '100%' }}>
<Marker
coordinates={[locationInputs.lon, locationInputs.lat ]}
anchor="center">
<div class="marker"></div>
</Marker>
</Map>
我错过了什么吗?谢谢
解决方案
React Map GL 在他们的文档中有一个类似的例子:
https://visgl.github.io/react-map-gl/examples/draggable-markers
在该页面上,您会找到“查看代码”的链接,在 App.js 中您会看到逻辑。
React- Mapbox - GL 以类似的方式工作,并且具有相同的属性,您可以将函数传递给:onDragStart
、onDrag
、onDragEnd
。
您需要以与他们类似的方式设置您的标记:
const onMarkerDragStart = useCallback(event => {
logEvents(_events => ({..._events, onDragStart: event.lngLat}));
}, []);
const onMarkerDrag = useCallback(event => {
logEvents(_events => ({..._events, onDrag: event.lngLat}));
}, []);
const onMarkerDragEnd = useCallback(event => {
logEvents(_events => ({..._events, onDragEnd: event.lngLat}));
setMarker({
longitude: event.lngLat[0],
latitude: event.lngLat[1]
});
}, []);
<Marker
longitude={marker.longitude}
latitude={marker.latitude}
offsetTop={-20}
offsetLeft={-10}
draggable
onDragStart={onMarkerDragStart}
onDrag={onMarkerDrag}
onDragEnd={onMarkerDragEnd}
>
推荐阅读
- vue.js - 如何在 Vue SFC 中注册导入的组件以满足 eslint-plugin-vue vue/no-unregistered-components 规则?
- linux - 如何找到用于手动包构建和安装的 Boost 库的路径?
- confluent-platform - 删除数据库中的某些内容时删除 ksqlDB 表中的某些内容
- javascript - ReactMarkdown 未在 React 应用程序中显示
- r - 在 R 中遇到 tximport 问题
- api - 列出组织的所有 GitHub 企业存储库
- java - 同一事务中mybatis删除表中所有数据后,实体仍然可以被选中
- python - 错误:无法从版本中找到满足 Django==1.10.5 要求的版本:无错误:找不到匹配的发行版 Django==1.10.5
- three.js - 不透明度为 0 的 Three.js 对象仍会遮挡其他点材质,如何避免这种干扰?
- javascript - 在 D3.js v6 中为日期字段自动调整轴刻度增量以避免重叠的最佳方法是什么?