D3平移和缩放后的点击坐标(D3 click coordinates after pan and zoom)

Posted smedas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D3平移和缩放后的点击坐标(D3 click coordinates after pan and zoom)相关的知识,希望对你有一定的参考价值。

我使用D3库来创建绘图应用程序。



我需要在用户单击的坐标上绘制对象(为了简单起见)。问题是当用户使用平移&缩放和移动视口。
然后对象是错误的位置的地方(我想问题是事件坐标是相对于svg元素而不是g,所以他们是计算没有适当的转换)。



< pre> $(‘svg‘)。on(‘click‘,function(event){
d3.select(‘#content-layer‘)。append )
.attr(‘r‘,10)
.attr(‘cx‘,event.offsetX)
.attr(‘cy‘,event.offsetY)
.attr (‘stroke‘,‘black‘)
.attr(‘fill‘,‘white‘);
});

var zoomBehavior = d3.behavior.zoom()
.scaleExtent([1,10])
.on(‘zoom‘,()=> {
var translate =translate(+ d3.event.translate +);
var scale =scale(+ d3.event.scale +);
d3.select ‘#content-layer‘)。attr(transform,translate + scale);
});

d3.select(‘svg‘)。call(zoomBehavior);


我试图添加点击回调到g元素,但它不工作



这里是jsfiddle:
https://jsfiddle.net/klinki/53ftaw7r/

 

解决方案

基本上你需要



所以我创建了一个变量:



  var translateVar = [0,0]; 



当您平移更新此变量时:



  translateVar [0] = d3.event.translate [0]; 
translateVar [1] = d3.event.translate [1];



并将其添加到圈子的坐标:



  .attr(‘cx‘,mouseCoords [0]  -  translateVar [0])
.attr(‘cy‘,mouseCoords [1] - translateVar [1] )



更新小提琴: https://jsfiddle.net/thatoneguy/53ftaw7r/2/



您还需要照顾缩放因此做类似的事情:



  var scaleVar = 1; 



在缩放时更新变量:



  scaleVar = d3.event.scale 



新坐标:



  .attr(‘cx‘,(mouseCoords [0]  -  translateVar [0])/ scaleVar)
.attr cy‘,(mouseCoords [1] - translateVar [1])/ scaleVar)



a href =https://jsfiddle.net/thatoneguy/53ftaw7r/5/ =nofollow> https://jsfiddle.net/thatoneguy/53ftaw7r/5/

以上是关于D3平移和缩放后的点击坐标(D3 click coordinates after pan and zoom)的主要内容,如果未能解决你的问题,请参考以下文章

D3.JS 具有实时数据、平移和缩放的时间序列折线图

在 D3.js 中缩放或平移时限制域

D3 平移缩放溢出

在 D3 中放大和缩小时如何更改平移和缩放的速度(使用 zoom.on 和 d3.event.translate,d3.event.zoom)?

Javascript / D3.js - 绘制大型数据集 - 提高 d3.js 绘制的 svg 图表中的缩放和平移速度

使用canvas和d3.js分层圆结构计算缩放和平移的方法