javascript - 如何在Marker中实现mapbox表达式?

标签 javascript mapbox mapbox-gl-js

如何在 mapboxgl.Marker() 中添加 Mapbox 表达式,如下所示:

"icon-size": ['interpolate', ['linear'], ['zoom'], 10, 1, 15, 0.5]

(我从这里复制了这个表达式:https://stackoverflow.com/a/61036364/5220885)

最佳答案

标记不支持表达式。它们是 HTML 元素,并且行为完全不同。

您必须按照以下方式伪造它:

  1. 向 map 的 zoom 事件添加处理程序,以便您可以在 map 放大和缩小时进行更新。
  2. 使用常规的旧 JavaScript 计算大小。
  3. 使用 CSS 应用该尺寸。

像这样:

map.on('zoom', () => {
    const scalePercent = 1 + (map.getZoom() - 8)  * 0.4;
    const svgElement = marker.getElement().children[0];
    svgElement.style.transform = `scale(${scalePercent})`;
    svgElement.style.transformOrigin = 'bottom';
});

代码笔在这里:https://codepen.io/stevebennett/pen/MWyXjmR?editors=1001

关于javascript - 如何在Marker中实现mapbox表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63870324/

相关文章:

javascript - 在 Vue.Js 中的 v-text 中附加多个字段

javascript - 使用嵌套字段/对象时,使用 React setState 钩子(Hook)更新后状态消失

javascript - Mapbox GL JS 找到距离点击点最近的地址

mapbox - Turf.js 查找使用 Mapbox GL JS 加载的数据边界框?

javascript - 如何在将 shapefile 作为 tileset 上传到 mapbox studio 后渲染形状

javascript - div 淡入淡出 onClick 不起作用

javascript - jQuery POST 在某些浏览器上不起作用

javascript - 标记之间的折线动画 - Mapbox

javascript - 带有自定义标签的 Mapbox GL Popup 设置内容

Mapbox gl绘制将名称添加到多边形