Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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 zoom不断缩小SVG的右侧,如何解决这个问题?_Javascript_Css_D3.js_Svg - Fatal编程技术网

Javascript D3 zoom不断缩小SVG的右侧,如何解决这个问题?

Javascript D3 zoom不断缩小SVG的右侧,如何解决这个问题?,javascript,css,d3.js,svg,Javascript,Css,D3.js,Svg,我有一个地理地图,我正试图添加缩放功能,以使用D3。我可以缩放,但似乎每当我这样做时,它都会不断地缩小到光标所在位置的右侧。如何使其缩放到光标的位置 下面是我所有的代码。缩放功能位于“main.js”中。它在“map”变量中使用,并在该变量之后创建 //create a new svg element with the above dimensions var map = d3.select("body") .append("svg") .att

我有一个地理地图,我正试图添加缩放功能,以使用D3。我可以缩放,但似乎每当我这样做时,它都会不断地缩小到光标所在位置的右侧。如何使其缩放到光标的位置

下面是我所有的代码。缩放功能位于“main.js”中。它在“map”变量中使用,并在该变量之后创建

 //create a new svg element with the above dimensions
var map = d3.select("body")
            .append("svg")
            .attr("width", width)
            .attr("height", height)
            .call(d3.zoom()
                .scaleExtent([1/2, 4])
                .on("zoom", zoomed));

//zoom function used above                
function zoomed() {
  map.attr("transform", d3.event.transform);
}

您应该转换
元素,而不是SVG:

var svg = d3.select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height);

//creating a group element named 'map':
var map = svg.append("g").call(d3.zoom()
    .scaleExtent([1 / 2, 4])
    .on("zoom", zoomed));

function zoomed() {
    map.attr("transform", d3.event.transform);
    //applying the transform to 'map'
}

这是最新的plunker:

非常感谢!看起来我还需要进一步研究如何在D3中正确地构造事物。@Dan实际上,这与SVG的关系比与D3的关系更大:如果将转换应用于整个SVG,会发生什么?你明白了吗?我不太明白你的意思。那不是我以前做的吗?我对这些东西也不是很了解,所以我可能只是感到困惑哈哈。没错:你翻译了整个SVG,这没有什么意义。您必须转换SVG中的元素。因此,这里的问题是更多地了解SVG,而不是D3。这就是我的观点。好吧,我明白了。谢谢你的建议!