D3.transition(). attr ('x', y) не работает, когда d3.attr('x', y)

Следующие работы (круг переместится в новое место в указанной точке)

d3target
  .attr('cx', newCX )
  .attr('cy', newCY )

но это не так:

d3target
  .transition()
  .attr('cx', newCX )
  .attr('cy', newCY )
   // .duration(1000) // Still doesn't work with or without the duration

и не делает этого: (путем предоставления начального значения как предложено документами API)

d3target
  .attr('cx', originalCX )
  .attr('cy', originalCY )
  .transition()
  .attr('cx', newCX )
  .attr('cy', newCY )
   // .duration(1000) // Still doesn't work with or without the duration

Круги не оживляют и не перемещаются. Мы попытались вручную установить dur на 1 секунду, чтобы убедиться, что анимация не заканчивается или пропускается, потому что она слишком мала, чтобы ее можно было заметить или пропустить или что-то подобное.

Мы пробовали и рассмотрели множество возможностей относительно того, почему, поэтому любые мысли о том, почему или что еще нужно попробовать, очень ценятся.

Основная информация для справки:
D3Target выглядит следующим образом, и то, что мы знаем, верно, учитывая, что первый блок кода работает, просто отрегулировав attr напрямую без вызова transition().

d3Target description

Ответ 1

Сначала присвойте вам переход (возврат метода перехода) к переменной, затем попробуйте console.log(transition_selection.empty()). Если он ложный, то вы знаете, что у вас есть что-то для перехода.

Вторая попытка: transition_selection.each('start', function(){ console.log('started'); }).each('interrupt', function() {console.log('interrupted');}).each('end', function(){ console.log('ended'); });

Таким образом вы сможете увидеть, был ли начат переход и был прерван.

Третья попытка: transition.attr('cx', function (d) { console.log( 'attr got assigned'); ) });

Таким образом, вы узнаете, было ли прочитано значение, указанное вами для 'cx'.

Собственно попробуйте все вышеперечисленное в том же запуске. Чтобы вы могли видеть, что происходит в каком порядке.

Всегда пытайтесь присвоить вам переходы. d3traget.transition('somename')

Таким образом вы можете запускать много переходов по одному и тому же выделению параллельно. Если вы запускаете несколько "неназванных" переходов на один и тот же выбор, второй переход остановит первый.

Надеюсь, что любое из того, что я вам дал, поможет вам решить вашу проблему. Удачи!

Ответ 2

Переход осуществляется с использованием следующего упрощенного кода:

HTML:

  <svg height='500' width='500'>
        <circle id='circ' cx='50' cy='50' r='10'></circle>   
    </svg>

JS:

var d3target = d3.select('#circ');

d3target
  .transition()
  .attr('cx', 100 )
  .attr('cy', 100 )

fiddle

Это означает, что в коде есть что-то еще, что останавливает переход от работы. Следуя ссылке на ваш код, насколько я вижу, именно здесь происходит переход:

 if(this.parentMeasureModel.get('timesRecorded') !== 0) {
    d3target
      .attr('cx', newCX )
      .attr('cy', newCY )

    setTimeout(function(){
      d3target
        .attr('cx', originalCX )
        .attr('cy', originalCY )
    }, dur);
  // Otherwise we use the standard method
  } else {      
    d3target.transition()
      .attr('cx', newCX )
      .attr('cy', newCY )
      .duration(dur)
      .each('end',function() {                   // as seen above
        d3.select(this).                         // this is the object 
          transition()                           // a new transition!
            .attr('cx', originalCX )    // we could have had another
            .attr('cy', originalCY )    // we could have had another
            .duration(dur);                  // .each("end" construct here.
       });
  }
}

Разница между ними - это переменная dur и каждый метод. Попробуйте использовать фактическое значение для переменной dur и удалить каждый метод. Если это сработает, тогда ваша проблема будет там.