2012-08-06 57 views
0

我使用d3.js,我發現這工作:如何在JavaScript中爲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變量造成的。任何人都知道如何解決它?

+0

由於'already_done'是一個全局變量,可能你只需動'already_done = 1;'入'zoom_in()'功能? – 2012-08-06 23:19:04

回答

0

找到了一種方法是這樣的:

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)}})