我正在使用D3js V5进行一个项目,该项目接受CSV文件的输入并返回工作流图,除此之外,一切正常。 我的问题是,当我通过“适合”按钮适合工作流程时,然后使用鼠标滚轮进行放大或缩小,只是跳到先前的缩放和位置设置。
经过一些研究,我发现在D3v4 +之后,“缩放行为不再在内部存储活动的缩放变换(即可见区域;缩放和平移)。缩放变换现在存储在缩放行为已应用。(link)“
话虽这么说,但我无法使其发挥作用,这就是为什么我寻求您的帮助。
代码如下:
document.getElementById('fitBTN').addEventListener('click',zoomFit);
function zoomFit() {
let bounds = document.getElementById('svgContent').getBBox();
let parent = document.getElementById('svgContent').parentElement;
let fullWidth = parent.clientWidth,fullHeight = parent.clientHeight;
let width = bounds.width,height = bounds.height;
let midX = bounds.x + width / 2,midY = bounds.y + height / 2;
if (width == 0 || height == 0) return; // nothing to fit
let scale = 0.95 / Math.max(width / fullWidth,height / fullHeight);
let translate = [
fullWidth / 2 - scale * midX,fullHeight / 2 - scale * midY
];
document
.getElementById('svgContent')
.setattribute(
'transform','translate(' +
translate[0] +
',' +
translate[1] +
') scale(' +
scale +
')'
);
}
svg
.call(
zoom()
.on('zoom',() => {
document
.getElementById('svgContent')
.setattribute(
'transform','translate(' +
currentEvent.transform.x * 0.125 +
',' +
currentEvent.transform.y * 0.125 +
') scale(' +
currentEvent.transform.k +
')'
);
})
.scaleExtent([0.1,1])
)
.on('dblclick.zoom',false)
.on('wheel',function() {
currentEvent.preventDefault();
})
.on('wheel',false);
我相信我必须拥有一些能够读取转换转换状态的变量,但是如何?