gpt4 book ai didi

javascript - D3 版本 4 的水平缩放?

转载 作者:行者123 更新时间:2023-11-29 21:16:19 25 4
gpt4 key购买 nike

对于 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 and k 是缩放点的坐标和规模。

d3.event.transform.toString 会给你一个像下面这样的字符串:

translate(x, y) scale(k) 如果您熟悉转换,那么您已经知道如何进行所需的转换。但仅供引用,原始转换的两个部分是:

translate(x, y):您在鼠标指向的位置发生缩放的原因。它实际上移动了对象,因此如果您删除这部分, Canvas 将围绕中心缩放。

scale(k) 缩放 Canvas 。

诀窍是如果你不希望 y 轴缩放,你可以传递额外的 arg 来缩放 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>

关于javascript - D3 版本 4 的水平缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com