2016-03-14 26 views
0

我試圖在每次放大或縮小地圖時調整標記的大小。 目前我正在使用這種方法:使標記在單張中可調整大小的最佳方法

  • 迭代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的問題。

+1

你爲什麼標記谷歌地圖以及傳單?請以可讀格式格式化您的代碼和問題! –

回答

0

看起來像有你指導你幾個以前的帖子:而不是讀取當前的圖標大小value

至於你的錯誤,在"zoomstart"事件中,您最好記住以前的縮放值並僅在處讀取它事件。我不確定事件只有在連續滾動(放大/縮小)時纔會觸發一次,而"zoomend"事件可能僅在最後觸發。

相關問題