【问题标题】:how to solve such a scope issue in javascript for d3.js?如何在 d3.js 的 javascript 中解决这样的范围问题?
【发布时间】:2012-08-06 23:15:47
【问题描述】:

我正在使用 d3.js,我发现这是可行的:

function zoom_in () {
    d3.select(this)
        .select("text")
        .style("font-size","55px");
}
var node = svg.selectAll("g.node")
    .data(json.nodes, function(d) { return d.name;})
    .enter().append("g")
    .on("mouseover", zoom_in);

但这行不通:

function zoom_in () {
    d3.select(this)
        .select("text")
        .style("font-size","55px");
}
var already_done = 0;
var node = svg.selectAll("g.node")
    .data(json.nodes, function(d) { return d.name;})
    .enter().append("g")
    .on("mouseover", function() {zoom_in();already_done=1;})

但是,我想在调用zoom_in 函数后做一些事情。 我不想写另一个函数zoom_in_already_done

我认为问题是由zoom_in 中的this 变量引起的。谁知道怎么解决?

【问题讨论】:

  • 既然already_done是一个全局变量,你能把already_done = 1;移到zoom_in()函数中吗?

标签: javascript scope d3.js


【解决方案1】:

找到这样的方法:

function zoom_in (ts) {
    d3.select(ts)
        .select("text")
        .transition()
        .style("fill",function(d) { return color(d.group);})
        .attr("dx",20)
        .style("font-size","55px");
}

然后

.on("mouseover", function() {if (dragging==0){zoom_in(this)}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多