datamaps - 清除 map 并重新绘制的最佳方法

标签 datamaps

我知道动态更改 map 的范围目前是不可能的。

所以我正在尝试:

创建 map 某些事件发生 然后,我废弃 map 并绘制一张包含新细节(包括新投影)的新 map 。

问题是我无法正确废弃旧 map 。我试图获取map变量,在svg属性上调用remove(),出于性能目的使用“delete svg”,然后解构该对象。然后将map变量重新分配给函数A的结果,其中函数A只是设置了一个新的map。

创建新 map 的函数:

function createMap (latlon){
var basicMap = new Datamap({
  element: document.getElementById("basic"),
    setProjection: function(element) {
var projection = d3.geo.equirectangular()
  .center(latlon)
  .rotate([0, 0])
  .scale(1200)
  .translate([element.offsetWidth / 2, element.offsetHeight / 2]);
var path = d3.geo.path()
  .projection(projection);

return {path: path, projection: projection};
},
  projection: "mercator",
  scope: 'world',
   fills: {
        defaultFill: "#ABDDA4",
      },
  responsive: true,
    done: function(datamap){
        datamap.svg.call(d3.behavior.zoom().on("zoom", redraw));
        $("#resetZoom").on("click", function(){
   resetZoom();
})
        function redraw() {
            datamap.svg.selectAll("g").attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
        }
        function resetZoom() { datamap.svg.selectAll("g").attr("transform", "translate(0,0)scale(1.0)"); }
},
});
return basicMap
}

销毁函数:

function cleanUp(map){
map.svg.remove();
delete map.svg;
delete map;

}

我将 map 初始化为basic,如下

basic = createMap([2,46]);

然后我清理 map (我的销毁函数)并重新分配:

cleanUp(basic);
basic = createMap([personLon, personLat])

表面上看,一切正常。而且性能还可以。但是,它并没有真正正常工作。例如,缩放功能不再起作用。当按下缩放按钮时,它会寻找 map 变量,但它再也找不到了。这是没有意义的,因为新 map 为按钮等创建了新的单击处理程序。它几乎可以工作。

但这根本行不通。有小费吗?谢谢。

最佳答案

我遇到了同样的问题,并通过使用 JQuery 删除该元素然后再次重新添加相同的元素来解决它。看起来有点像黑客,但它对我有用。

        $("#drilldown-map").parent().append( "<div id='drilldown-map' />");
        $("#drilldown-map").remove();

        var mapData = getMapData();
        var map = new Datamap(mapData);

关于datamaps - 清除 map 并重新绘制的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888646/

相关文章:

javascript - 在 Datamaps 和 D3 中绑定(bind)完成事件时,如何传递事件变量/在 map 上放置标记?

javascript - new Datamap() 在调用之间保持共享的内存状态

javascript - 鼠标滚轮缩放 map - DataMaps.js

javascript - D3 数据映射 : OnClick Events on Bubbles

javascript - 如何在 clojurescript 中包含外部 javascript 库

javascript - 数据图悬停弹出

javascript - D3 数据图 : Pass additional values related to data on click of country

javascript - D3 数据映射 : How to stack bubbles based on radius?

javascript - 数据图 - 根据值更改颜色

javascript - 如何动态改变d3 map 上一个国家的颜色