2015-12-18 3 views
0

Я хочу сделать анимацию круга с помощью d3. Я хочу показать круг, растущий при наведении мыши. для этого я использовал следующий код. код работает без ошибок, так как он не создает анимацию круга. любой совет, где я делаю неправильно. смотрите код нижеЭлемент окружности не имеет доступа

var vis = d3.select(e).append("svg") 
    .attr("width", svgwidth) 
    .attr("height", svgheight); 

    var circles = vis.selectAll("circle").data(sampleData); 
    var circleEnter=circles.enter().append("g").append("circle"); 

    var circles = vis.selectAll("circle").data(sampleData); 
    var circleEnter=circles.enter().append("g").append("circle"); 

    circleEnter.attr("cx", function (d,i) 
      { 
      Cxs[i]= xRange (d.x); 
      return xRange (d.x); 
      }) 

    .attr("cy", function (d,i) { 
     Cys[i]= yRange (d.y); return yRange (d.y); 
     }) 

    .attr("r", 20) 
    .style("fill-opacity", .2) 
    .style("fill", fillColor) 

    .on("mouseover", function(d,i) 
      { 


     d3.select(this).select("circle").transition() 
     .duration(750) 
     .attr("r",30); 
    } 

    .on("mouseout", function(d,i) 
      { 


     d3.select(this).select("circle").transition() 
     .duration(750) 
     .attr("r",20); 
    } 

ответ

2

Вам нужно просто d3.select(this) - это будет уже выбрать circle элемент:

.on("mouseover", function(d,i) { 
    d3.select(this).transition() 
    .duration(750) 
    .attr("r",30); 
}).on("mouseout", function(d,i) { 
    d3.select(this).transition() 
    .duration(750) 
    .attr("r",20); 
}) 
+0

спасибо. он работал, однако мне интересно, что, если я хочу применить тот же переход к двум соседним окружениям. например, если мышь над кругом, я хочу, чтобы окружающие круги уменьшались по размеру. для этого я использовал следующее .on («mouseover», function (d, i) { d3.select (this) .circles (i + 1) .transition() .duration (750) .attr (" r12, 20), , но он возвращает ошибку. Я был бы признателен за любое предложение. привет. – Nhqazi

+0

В этом случае я бы присвоил идентификаторы элементам, которые упрощают выбор этого способа, например, что-то, основанное на индексе: '. attr ("id", function (d, i) {return "idx" + i;}) ', а затем' d3.select ("idx" + (i + 1)). transition() ... '. –

+0

Спасибо, я использовал вашу предлагаемую кодировку, но я нашел, что она не работает. Я еще раз запустил это и обнаружил, что он не создал никаких объектов с этими идентификаторами (return «idx» + i), и для проверки этого я использовал d3.select ("idx" + i) .attr ("id) Uncaught TypeError: Не удается прочитать свойство getAttribute. любая мысль – Nhqazi

Смежные вопросы