【问题标题】:D3 zoom is constantly zooming down and right of SVG, how do I fix this?D3 缩放不断缩小 SVG 的右侧,我该如何解决这个问题?
【发布时间】:2017-06-20 18:24:03
【问题描述】:

我有一张地理地图,我正在尝试将缩放功能添加到使用 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);
}

http://plnkr.co/edit/0S1OJr?p=preview

【问题讨论】:

    标签: javascript css d3.js svg


    【解决方案1】:

    您应该转换 <group> 元素,而不是 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'
    }
    

    这是更新的插件:http://plnkr.co/edit/B0o0tULpve1rbpyRgFpz?p=preview

    【讨论】:

    • 非常感谢!看来我必须研究如何在 D3 中正确地构造事物。
    • @Dan 实际上这与 SVG 的关系比与 D3 的关系更大:如果将转换应用于整个 SVG,会发生什么?你看到了吗?
    • 我不确定我理解你的意思。这不就是我以前做的吗?我对这些东西也不是很了解,所以我可能只是很困惑哈哈。
    • 完全正确:您正在翻译整个 SVG,这没什么意义。您必须翻译该 SVG 中的元素。所以,这里的问题是更多地了解 SVG,而不是 D3。这就是我的观点。
    • 好的,我明白了。感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多