【问题标题】:Best way to make marker resizable in leaflet在传单中使标记可调整大小的最佳方法
【发布时间】:2016-06-29 07:39:45
【问题描述】:

每次放大或缩小地图时,我都会尝试调整标记的大小。 目前我正在使用这种方法:

  • 在 zoomend 方法中迭代所有标记。
  • 获取当前图标大小
  • 执行一些计算以根据缩放大小获得新的标记大小。
  • 为图标对象设置新维度。

    map.on('zoomend', function() {
    zoomEndLevel = map.getZoom();
    var difference = zoomEndLevel - zoomStartLevel;
    console.log("difference in zoom " + difference);
    markerArray.forEach(function(marker) {
        var icon = marker.options.icon;
        var oldX = icon.options.iconSize[0];
        var oldY = icon.options.iconSize[1];
        var newX = getNewIconAxis(oldX, difference);
        var newY = getNewIconAxis(oldY, difference);
        console.log(newX + " " + newY);
        icon.options.iconSize = [ newX, newY ];
        marker.setIcon(icon);
    });
    

    });

    map.on('zoomstart', function() {
    zoomStartLevel = map.getZoom();
    

    });

    function getNewIconAxis(value, zoomChange) {
    if (zoomChange > 0) {
        for (var i = zoomChange; i > 0; i--) {
            value = value * 2;
        }
    } else {
        for (var i = zoomChange; i < 0; i++) {
            value = value / 2;
        }
    }
    return value;
    

    }

问题: 如果我一次放大和缩小 1 个级别,则此代码可以正常工作。如果我太频繁地滚动进出鼠标,那么这段代码会给出奇怪的输出。有时标记大小会变得太大或太小。

问题: 1)这是使标记在不同缩放级别上调整大小的唯一方法吗? 2)如果是,那么我在这里缺少什么或应该进行哪些更改以使其完美运行。?

注意:标记谷歌地图也是因为它更多的是地图(谷歌或传单或地图框)的逻辑问题,而不是特定于 api 的问题。

【问题讨论】:

  • 你为什么要标记谷歌地图和传单?请以可读的格式格式化您的代码和问题!

标签: javascript google-maps leaflet ui-leaflet


【解决方案1】:

好像有几个以前的帖子指导你:

至于您的错误,与其在"zoomstart" 事件中读取当前图标大小value,不如记住之前的缩放值并仅在"zoomend" 事件中读取它。我不确定"zoomstart" 事件仅在您连续滚动(放大/缩小)时触发一次,而"zoomend" 事件可能仅在最后触发。

【讨论】:

    猜你喜欢
    • 2011-03-08
    • 1970-01-01
    • 2011-01-30
    • 2014-04-21
    • 2021-01-29
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多