• 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/

  • 相关阅读:
    洛谷P1071 潜伏者
    2019BJFU 网站设计(孙俏-web前端开发)实验代码-181002222
    反思——P1307 数字反转
    洛谷P1067 多项式输出
    湖南大学第十五届程序设计竞赛(重现赛)
    2019河北省大学生程序设计竞赛(重现赛)
    2019BJFU C++实验习题(完结)
    配置android source 在ubuntu中编译环境
    Android屏幕保持唤醒状态
    Android richtext
  • 原文地址:https://www.cnblogs.com/smedas/p/12483427.html
Copyright © 2020-2023  润新知