gpt4 book ai didi

javascript - 在 D3 中拖动行为返回 NaN

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:41 25 4
gpt4 key购买 nike

我有这个代码:

  var stage = d3.select("body").append("svg");
var points = [0, 50, 100, 150];
var letters = "drag".split(",");
var log = d3.select("#log");

//drag behaviour, will bind later
var drag = d3.behavior.drag()
.origin(Object)
.on("drag", dragmove);


//append texts
var texts = stage
.selectAll("text")
.data(letters)
.enter()
.append("text")
.attr("font-family", "Arial")
.attr("class", "word")
.attr("x", function(d,i){return points[i]})
.attr("y", 100)
.text(function(d){return d})
.call(drag);

function dragmove() {
log.text(
"x: " + d3.event.x + ", " +
"y: " + d3.event.y + ", " +
"dx: " + d3.event.dx + ", " +
"dy: " + d3.event.dy
);
d3.select(this).attr("x", d3.event.x);
}​

但是,d3.event.xd3.event.y 返回 NaN。有趣的是,d3.event.dxd3.event.dy 返回了正确的值。我的代码有什么问题?

你可以在这里看到一个 jsfiddle:http://jsfiddle.net/UMwmr/

最佳答案

这是因为 d3.event 中继到数据,如果您 checkin 您的代码:

.attr("x", function(d,i){console.log(d);return points[i]})

你会发现d是文本,不能有x,y属性。

解决方案是将每个字母作为对象(你也用“,”分隔它们,但我想它应该是“”)所以这里的代码:

var stage = d3.select("body").append("svg");
var points = [0, 50, 100, 150];
var letters = "drag".split("").map(function(d, i) {
    return {
        text: d,
        x: points[i],
        y: 100
    }
});
var log = d3.select("#log");

//drag behaviour, will bind later
var drag = d3.behavior
    .drag()
    .origin(Object)
    .on("drag", dragmove);


//append texts
var texts = stage
    .selectAll("text")
    .data(letters)
    .enter()
       .append("text")
       .attr("font-family", "Arial")
       .attr("class", "word")
       .attr("x", function(d, i) {
            return d.x;
       })
       .attr("y", 100)
       .text(function(d) {
            return d.text;
        })
.call(drag);

function dragmove(d) {
    log.text(
        "x: " + d3.event.x + ", " +
        "y: " + d3.event.y + ", " +
        "dx: " + d3.event.dx + ", " +
        "dy: " + d3.event.dy);
//set new position to the object
d.x=d3.event.x;
    d3.select(this).attr("x", d3.event.x);
}​

fiddle

关于javascript - 在 D3 中拖动行为返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13657687/

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