【问题标题】:How do I change the speed of the zoom in D3如何更改 D3 中的缩放速度
【发布时间】:2015-03-04 02:15:40
【问题描述】:

我目前正在使用鼠标滚轮放大和缩小我的 D3 力有向图。

有没有办法让放大更慢或更快

例如,当我移动鼠标滚轮时,假设当前刻度是这样移动的:

1,2,3,4,5.

我想移动它:

1,1.5,2,2.5,3 等等。

这是我的缩放功能:

var minZoom = 0.2,
    maxZoom = 2.5;
    var zoom = d3.behavior.zoom()
    .on("zoom", redraw)
    .scaleExtent([minZoom, maxZoom])//-call zoom but put scale extent on to limit zoom in/out
    ;

我的重绘:

function redraw() //-redraw network
{
    var trans=d3.event.translate;
    var scale=d3.event.scale; 
    svg.attr("transform","translate(" + trans + ")" + " scale(" + scale + ")"); //-translates and scales
}

【问题讨论】:

标签: javascript d3.js


【解决方案1】:

我标记为重复,原始回复在这里: How to change speed of translate and scale when zooming in and out in D3 (using zoom.on & d3.event.translate, d3.event.zoom)?

您可以根据自己的身高和宽度调整解决方案。 您也可以从this.getBBox().height 获取此信息。这个高度在应用比例后才有价值,这意味着你总是落后于迭代。如果你添加真实的高度和宽度会更好。

 function redraw() {
        var scale =  Math.pow(d3.event.scale,.1);
        var translateY = (height - (height * scale))/2;
        var translateX = (width - (width * scale))/2;

        svg.attr("transform", "translate(" + [translateX,translateY] + ")" + " scale(" +scale+ ")");            
    };

在这一行中:var scale = Math.pow(d3.event.scale,.1); .1 是速度因子,越小越慢

【讨论】:

    【解决方案2】:

    你可以在重绘函数里面截取和调整比例:

    function redraw() //-redraw network
     {
      var trans=d3.event.translate;
      var scale=d3.event.scale;
      var newScale = scale / 2;
      zoom.scale(newScale); 
      svg.attr("transform","translate(" + trans + ")" + " scale(" + newScale + ")"); //-translates and scales
     }
    

    或者如果你想要更具体的插值,你可以在重绘函数中添加一个像 d3.linear.scale() 这样的插值器:

    function redraw() //-redraw network
     {
      scaleInterpolator = d3.linear.scale().domain([1,10,100,1000]).range9([1,3,9,99]);
      var trans=d3.event.translate;
      var scale=d3.event.scale;
      svg.attr("transform","translate(" + trans + ")" + " scale(" + scaleInterpolator(scale) + ")"); //-translates and scales
     }
    

    【讨论】:

    • 谢谢,这是有道理的,但是当我放大时,它只是缩小,而不是:/ 当我尝试平移时它放大并发疯了哈哈我不确定为什么
    • 这里translate和scale没有关系,你需要把scale和translate的关系搞好
    猜你喜欢
    • 2012-11-09
    • 2018-01-16
    • 2015-04-25
    • 1970-01-01
    • 2017-12-21
    • 2019-01-04
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多