d3拖拽元素之后如何获得对应坐标轴的值

发布于 2022-09-05 04:46:24 字数 1389 浏览 22 评论 0

clipboard.png

let svg = d3.select('#create')
    .append('svg')
    .attr('id','chart')
    .attr('width',width)
    .attr("height",height);

//定义x轴y轴的比例尺
let xScale = d3.scaleLinear()
    .domain([0,this.sliderMaxVal])
    .range([0,width - padding.left - padding.right])
    .clamp(true);

let yScale = d3.scaleLinear()
    .domain([0,3])
    .range([height - padding.top - padding.bottom,0])
    .clamp(true);

//定义x轴y轴
let xAxis = d3.axisBottom().scale(xScale).ticks(10);
let yAxis = d3.axisLeft().scale(yScale).ticks(3);

//添加X轴y轴
svg.append('g')
    .attr('class','axis')
    .attr('transform','translate(' + padding.left + ',' + (height-padding.bottom) + ')')
    .classed('axis-x',true)
    .call(xAxis);

svg.append("g")
    .attr('class','axis')
    .attr('transform','translate(' + padding.left + ',' + padding.top + ')')
    .classed('axis-y',true)
    .call(yAxis);
               
 //拖拽     
let drag = d3.drag()
    .on("start", function(d){
        console.log("start");
    }).on("end", function(d){
        console.log(d3.mouse(this)[0]);
        console.log("end");
    }).on("drag", function(d){
        d3.select(this.childNodes[0])
            .attr("x",d3.event.x) 
            .attr("y",d3.event.y); 
    });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把昨日还给我 2022-09-12 04:46:24
  • 根据你x轴和y轴的比例尺定义,x轴轴上数值范围[0, this.sliderMaxVal],坐标范围[0, width - padding.left - padding.right],y轴轴上数值范围[0, 3],坐标范围[height - padding.top - padding.bottom, 0]

  • 即如下图:
    clipboard.png

  • 按照比例尺,假设屏幕坐标为

$$ (x_0, y_0) $$
屏幕坐标向坐标系坐标转化矩阵为

$$
\begin{bmatrix} \
-\frac{3}{H - PT - PB} & 0 \\
0 & \frac{sliderMaxVal}{W - PL - PR}
\end{bmatrix}
$$

所以,坐标系坐标为

$$
x_1 = -\frac{3 \times x_0}{height - padding \cdot top - padding \cdot bottom} \\
y_1 = \frac{this \cdot sliderMaxVal \times y_0}{width - padding \cdot left - padding \cdot right}
$$

坐标系坐标为
$$
(-\frac{3 \times x_0}{height - padding \cdot top - padding \cdot bottom}, \frac{this \cdot sliderMaxVal \times y_0}{width - padding \cdot left - padding \cdot right})
$$

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文