【问题标题】:Popup for a line in Mapbox GL JS, requires padding or approximate mouse-overMapbox GL JS 中一行的弹出窗口,需要填充或近似的鼠标悬停
【发布时间】:2018-12-04 23:12:34
【问题描述】:

我想为 Mapbox GL JS 中的一行创建一个弹出窗口。我有一个包含很多直线的图层,定义如下:

map.addLayer({id: 'lineLayer',
          type: 'line',
          source: 'lineSource',
          layout: {'line-join': 'round', 'line-cap': 'round'},
          paint: {'line-color': '#00c853','line-width': 5, 'line-opacity': 1 }});

然后我在一行中添加一个弹出窗口如下(伪代码):

map.on('mousemove', 'lineLayer', (e) => {
    map.getCanvas().style.cursor = 'pointer';
    popupCoordinatesXY = e.point; });

问题是:出于美观的原因,我不希望线条太宽,但是将鼠标准确地放在线条上太难了。即使光标距离某行大约 10 像素,如何触发该行的 mousemove 事件?

我已经考虑过用更宽的线条制作一个额外的、不可见的层,但我可以想象有一个更优雅的解决方案。

【问题讨论】:

    标签: javascript mapbox mapbox-gl-js


    【解决方案1】:

    我会按照您的建议添加一个新层,但使用opacity: 0,更大的line-width 并在该层上注册事件(opacity: 0 功能包含在结果中,但如果您设置 @987654325 则不会@ 在图层上)。

    我唯一能想到的另一件事是 querySourceFeatures 并使用 turf 做一个 pointToLineDistance 但这比添加那个不可见的鼠标目标层还要慢和混乱。

    【讨论】:

    • 感谢关于不透明度与可见性的提示。我现在已经实现了这个,它工作正常。我想多一层毕竟不是什么浪费。
    猜你喜欢
    • 2022-07-09
    • 1970-01-01
    • 2022-12-19
    • 2010-11-02
    • 2016-09-23
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多