D3.js 缩放和平移

向元素添加缩放和平移行为需要三个步骤:

  1. 调用d3.zoom()创建缩放行为函数
  2. 添加在发生缩放或平移事件时调用的事件处理程序。事件处理程序接收可应用于图表元素的转换
  3. 将缩放行为附加到接收缩放和平移手势的元素
let data = [], width = 600, height = 400, numPoints = 100;

let zoom = d3.zoom()
  .on('zoom', handleZoom);

function handleZoom(e) {
  d3.select('svg g')
    .attr('transform', e.transform);
}

function initZoom() {
  d3.select('svg')
    .call(zoom);
}

function updateData() {
  data = [];
  for(let i=0; i<numPoints; i++) {
    data.push({
      id: i,
      x: Math.random() * width,
      y: Math.random() * height
    });
  }
}

function update() {
  d3.select('svg g')
    .selectAll('circle')
    .data(data)
    .join('circle')
    .attr('cx', function(d) { return d.x; })
    .attr('cy', function(d) { return d.y; })
    .attr('r', 3);
}

initZoom();
updateData();
update();

可以限制缩放和平移,以便用户只能在指定范围内缩放和平移。.scaleExtent可以使用传递数组来限制缩放,[min, max]其中min是最小比例因子,max是最大比例因子;使用.translateExtent指定[[x0, y0], [x1, y1]]限制用户平移的范围。

let zoom = d3.zoom()
  .scaleExtent([1, 5]);
  
let width = 600, height = 400;

let zoom = d3.zoom()
  .scaleExtent([1, 5])
  .translateExtent([[0, 0], [width, height]]);

可以通过编程方式进行缩放和平移。例如,您可以创建单击时缩放图表的按钮。缩放行为具有以下以编程方式设置缩放和平移的方法:

方法名称 描述
.translateBy 将给定的x, y偏移量添加到当前变换
.translateTo 设置变换,使给定x, y坐标居中(或定位在给定点上[px, py]
.scaleBy 将当前比例因子乘以给定值
.scaleTo 将比例因子设置为给定值
.transform 将变换设置为给定的变换。(d3.zoomIdentity)用于创建缩放变换。)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容