我在D3中创建了一个地图,该地图位于具有网格图案(check out the gist block here — click "ranks" and "pop" to transition))的svg上。我已经用圆圈标记了一些城市,并且有一个按钮可以从地图过渡到图形,同时保持圆圈可见。

要创建网格背景,我使用以下HTML设置了SVG(code from this post):

<div id ="bck" style="width:700px;height:500px">
          <svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg">
            <defs>
              <pattern id="smallGrid" width="8" height="8" patternUnits="userSpaceOnUse">
                <path d="M 8 0 L 0 0 0 8" fill="none" stroke="lightblue" stroke-width="0.5"/>
              </pattern>
              <pattern id="grid" width="80" height="80" patternUnits="userSpaceOnUse">
                <rect width="80" height="80" fill="url(#smallGrid)"/>
                <path d="M 80 0 L 0 0 0 80" fill="none" stroke="lightblue" stroke-width="0.5"/>
              </pattern>
            </defs>

            <rect width="100%" height="100%" fill="url(#grid)" />
          </svg>
        </div>


我将地图附加到此SVG,因此:

var svg = d3.select("body").select("svg");
svg.selectAll("path")
                    .data(json.features)
                    .enter()
                    .append("path")
                    .attr("d", path)
                    .attr({
                        "fill": "#B0B0B0",
                        "stroke": "White",
                        "stroke-width": 0.3,
                        "opacity": 1
                    });


要将地图移出并将圆环留在网格背景上时,我很努力-当我尝试单独删除地图但离开网格时,网格也消失了,尽管圆仍然存在:

        d3.selectAll("path")
            .transition()
            .delay(10)
            .duration(1000)
            .attr({
                "stroke-width": 0,
                "opacity": 0
            });


为什么网格也消失了,而不仅仅是代表地图的“路径”消失了?如何在淡化地图的同时保持背景中的网格并保持圆形可见?

编辑:我知道最初的网格设置有点混乱-我不知道如何在JS中做到这一点。如果您有任何建议,我很想听听他们的意见,并简化HTML。

最佳答案

模式包含路径元素。当选择所有路径时,您也会在模式中获得路径,因此模式变为不可见,因此填充有模式的网格也将变为不可见。

您需要修复选择器,不要选择模式中的路径。也许您可以给某些路径一个类,然后按类选择适当的路径。

关于javascript - 在D3中将 map 不透明度设置为0时,为什么整个SVG都消失了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32829286/

10-11 13:01