javascript - 如何将 d3.js 中时间刻度的缩放限制为分钟?

标签 javascript d3.js

我有一个在 x 轴上使用时间刻度的 d3v4 图表。一切正常,但当我放大时,它永远不会停止。有没有办法让它在达到分钟刻度时停止缩放?

d3.scaleTime().range([0, width])
...
var zoom = d3.zoom()
      .scaleExtent([1, Infinity])
      .translateExtent([[0, 0], [width, height]])
      .extent([[0, 0], [width, height]])
      .on("zoom", zoomed);

如果我将 Infinity 更改为某个数字,我可以阻止它缩放,但问题是比例的大小每次都不同,所以比例范围需要达到分钟比例变化。

最佳答案

您只需将 scaleExtent 设置为正确的值。如果“比例的大小每次都不同”,只需使用初始域值设置 scaleExtent:

var domainStart = new Date('1/1/2017'),
    domainEnd = new Date('2/1/2017');

var scale = d3.scaleTime()
  .domain([domainStart, domainEnd])
  .range([0, width])

...

// max zoom is the ratio of the initial domain extent to the minimum
// unit that you want to zoom to (1 minute == 1000*60 milliseconds)
var zoomMax = (domainEnd.getTime() - domainStart.getTime()) / (1000*60),
    zoomMin = 1;  

var zoom = d3.zoom()
  .scaleExtent([zoomMin, zoomMax])
  .translateExtent([[0, 0], [width, height]])
  .extent([[0, 0], [width, height]])
  .on("zoom", zoomed);

关于javascript - 如何将 d3.js 中时间刻度的缩放限制为分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828472/

相关文章:

javascript - 如何对齐 <section> 标签中的列表?

javascript - formdata POST 请求上出现网络错误 React Native

javascript - 是否可以清除 JEST 中模块的模拟?

javascript - android 2.3 上的 d3.js 可视化

javascript - 向 D3 圈子添加标签/文本?

javascript - 确定 HTML 输入字段如何获取其值的来源(即 : JavaScript code, 服务器代码、浏览器缓存等)

javascript - 如何在 Nuxt.js 中创建自定义加载指示器?

javascript - 寻找重构 D3.js 风格方法链模式的方法

javascript - 将 CSS 样式添加到 SVG

javascript - 如何防止新元素覆盖 d3.js 中的现有元素?