Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3弹出窗口在放大世界地图上的大小_Javascript_D3.js_Zooming_Force Layout - Fatal编程技术网

Javascript D3弹出窗口在放大世界地图上的大小

Javascript D3弹出窗口在放大世界地图上的大小,javascript,d3.js,zooming,force-layout,Javascript,D3.js,Zooming,Force Layout,在我的D3世界地图上,我有一个名为“main”的父svg:g组,它有两个svg:g元素,一个用于国家,另一个用于弹出窗口 我在svg:g元素“countries”下绘制了countries路径。在名为“弹出窗口”的svg:g下,我使用D3Force布局绘制弹出窗口节点,该布局将多个标注显示为矩形 单击任何国家/地区都可以将该国家/地区缩放到屏幕大小。如果我在svg:g“countries”上应用缩放,因为我不希望弹出窗口缩放,因为它们会变得更大 因为较小国家的边界框将具有较大的范围,而较大国家的

在我的D3世界地图上,我有一个名为“main”的父svg:g组,它有两个svg:g元素,一个用于国家,另一个用于弹出窗口

我在svg:g元素“countries”下绘制了countries路径。在名为“弹出窗口”的svg:g下,我使用D3Force布局绘制弹出窗口节点,该布局将多个标注显示为矩形

单击任何国家/地区都可以将该国家/地区缩放到屏幕大小。如果我在svg:g“countries”上应用缩放,因为我不希望弹出窗口缩放,因为它们会变得更大

因为较小国家的边界框将具有较大的范围,而较大国家的边界框将具有较小的范围值


现在,我应该如何计算Svg:g“弹出窗口”的平移和缩放,以便弹出窗口的矩形大小和字体保持不变

通过使用一个公式,它就像一个符咒: [应用缩放后的位置]*(1-缩放倍数)。 有关如何计算变量scalePopup,请参见下文

  var bounds = path.bounds(d),
        dx = bounds[1][0] - bounds[0][0],
        dy = bounds[1][1] - bounds[0][1],
        x = (bounds[0][0] + bounds[1][0]) / 2,
        y = (bounds[0][1] + bounds[1][1]) / 2;

    var scale = countryZoomScale(Math.max(dx, dy)) / Math.max(dx / width, dy / height),
        translate = [width / 1.5 - scale * x, height / 2 - scale * y];

    var scalePopup = map.zoomFactor / scale;
    var popupLayer = d3.select('.popupLayer');
    var centroid = path.centroid(d);

    popupLayer.attr("transform", "translate(" + centroid[0] * (1 -      scalePopup) + "," + centroid[1] * (1 - scalePopup) + ")scale(" + scalePopup + ")");