【问题标题】:d3 pan/zoom with DOM center point is off带有 DOM 中心点的 d3 平移/缩放已关闭
【发布时间】:2016-11-30 01:21:50
【问题描述】:

我正在尝试使用 d3 进行缩放和平移。

我从here 中举了一个例子,并把 svg 换成了普通的 dom。

代码:

var section = d3.select("section"),
    width = +section.attr("width"),
    height = +section.attr("height");

var points = d3.range(2000).map(phyllotaxis(10));

var div = section.append("div");

div.selectAll("p")
    .data(points)
  .enter().append("p")
    .attr("style", function(d) { return 'left: '+d[0]+'px; top: '+d[1]+'px;' })
    .text('hi');

section.call(d3.zoom()
        .scaleExtent([1 / 2, 4])
        .on("zoom", zoomed));

function zoomed() {
  div.attr("style", `transform: translate(${d3.event.transform.x}px, ${d3.event.transform.y}px) scale(${d3.event.transform.k})`);
  div.attr("transform", d3.event.transform);
}

function phyllotaxis(radius) {
  var theta = Math.PI * (3 - Math.sqrt(5));
  return function(i) {
    var r = radius * Math.sqrt(i), a = theta * i;
    return [
      960 / 2 + r * Math.cos(a),
      500 / 2 + r * Math.sin(a)
    ];
  };
}

这是一个 codepen 显示问题。

问题: 请注意,平移效果很好,但缩放中心点已关闭。它应该以鼠标所在的位置为中心放大。

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    假设您确实需要 <div>s 和 <p>s 而不是 <g>s 和 <circle>s;

    你的翻译系数有点偏。

    改变你的

    function zoomed() {
      g.attr("style", `transform: translate(${d3.event.transform.x}px, ${d3.event.transform.y}px) scale(${d3.event.transform.k})`);
      g.attr("transform", d3.event.transform);
    }
    

    function zoomed() {
      g.attr("style", `transform: translate(${d3.event.transform.x-480}px, ${d3.event.transform.y}px) scale(${d3.event.transform.k})`);
      g.attr("transform", d3.event.transform);
    }
    

    我认为会“解决”你的问题。

    这是更新后的代码笔:http://codepen.io/anon/pen/bBoPVx

    【讨论】:

    • 480 来自哪里?
    • @TylerGraf width/2
    • 谢谢,解决了。你知道为什么系数会关闭吗?
    • @TylerGraf 老实说,我还无法弄清楚,但是如果您查看元素,您的div 不在section 的中心。这就是我提出“中心”想法的地方。
    猜你喜欢
    • 2013-05-16
    • 2015-02-11
    • 2018-03-03
    • 1970-01-01
    • 2019-07-25
    • 2019-01-15
    • 1970-01-01
    • 2018-01-04
    • 2021-10-01
    相关资源
    最近更新 更多