水平变焦与D3版本4
Horizontal zoom with D3 version 4?
与D3版本4,我如何限制缩放到只是x轴?
无限制缩放示例:
var sideLength = 190;
var data = [
[0, 0],
[0.5, 0.8],
[1, 0.4]
];
var svg = d3.select("body")
.append("svg")
.attr("width", sideLength)
.attr("height", sideLength);
var yScale = d3.scaleLinear().range([sideLength, 0]);
var xScale = d3.scaleLinear().range([0, sideLength]);
var graphGroup = svg.append("g");
var onZoom = function() {
graphGroup.attr("transform", d3.event.transform);
};
var zoomBehavior = d3.zoom().on("zoom", onZoom);
var line = d3.line()
.x(function(d) {
return xScale(d[0]);
})
.y(function(d) {
return yScale(d[1]);
});
svg.call(zoomBehavior);
graphGroup.selectAll("path").remove();
graphGroup.append("path")
.datum(data)
.attr("class", "line")
.attr("d", line);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>D3 Zoom</title>
</head>
<body>
<script src="http://d3js.org/d3.v4.min.js"></script>
</body>
</html>
我不知道你到底在寻找什么"限制缩放到x轴",但如果你的意思是你想要y轴在缩放时保持不变(因此你的形状被扭曲),你可以手动构建转换函数。
d3.event.transform
有3个属性x
、y
和k
,分别是缩放点坐标和尺度坐标。
d3.event.transform.toString
将给出如下字符串:
translate(x, y) scale(k)
,如果您熟悉转换,您已经知道如何进行所需的转换。但仅供参考,原始转换的两个部分是:
translate(x, y)
:你认为缩放发生在点鼠标指向的原因。它实际上是在移动对象如果你移除这部分,画布会按中心缩放
scale(k)
缩放画布。
技巧是如果你不希望y轴缩放,你可以传递额外的参数来缩放y轴。
所以如果你只想保持y轴不变(不缩放也不平移)你可以使用:
var sideLength = 190;
var data = [
[0, 0],
[0.5, 0.8],
[1, 0.4]
];
var svg = d3.select("body")
.append("svg")
.attr("width", sideLength)
.attr("height", sideLength);
var yScale = d3.scaleLinear().range([sideLength, 0]);
var xScale = d3.scaleLinear().range([0, sideLength]);
var graphGroup = svg.append("g");
var onZoom = function() {
var transform = d3.event.transform;
var transformString = 'translate(' + transform.x + ',' + '0) scale(' + transform.k + ',1)';
graphGroup.attr("transform", transformString);
};
var zoomBehavior = d3.zoom().on("zoom", onZoom);
var line = d3.line()
.x(function(d) {
return xScale(d[0]);
})
.y(function(d) {
return yScale(d[1]);
});
svg.call(zoomBehavior);
graphGroup.selectAll("path").remove();
graphGroup.append("path")
.datum(data)
.attr("class", "line")
.attr("d", line);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>D3 Zoom</title>
</head>
<body>
<script src="http://d3js.org/d3.v4.min.js"></script>
</body>
</html>
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 如何在d3.js中返回路径的y坐标
- JS编译器/包管理器,用于版本控制
- d3基于用户选择动态更新节点
- jQuery-2.1.1.min.js或最新版本jQuery-2.13.min.js不会't支持'@
- 有条件更新d3.js力图中节点的最佳方法
- Chrome加载旧版本的Javascript文件
- D3:多系列图表不适用于上一版本
- 试图实现d3.js版本4作为一个聚合物组件
- d3.layout.d3版本4中的树图
- d3-transition attrTween, styleTween方法在d3版本4中不会被触发
- D3版本4中的单元测试转换
- 同一页面上多个版本的脚本(d3.js)
- D3.js—序数音阶(版本3到版本4)
- 水平变焦与D3版本4
- 在版本4中动态添加节点到D3 Force布局
- D3.js版本4使节点具有粘性
- d3.js在版本4中重写缩放示例
- D3.classed()使用多个选择器(版本4)