2015-06-27 3 views
0

Хорошо, сначала - look at this fiddle. Вы должны видеть фигуры, вращающиеся взад и вперед, как сумасшедшие.Силовой макет узла вращения

Это то, что происходит:

force.on("tick", function(e) { 
    vis.selectAll("path") 
     .attr("transform", function(d) { 
     return "translate(" + d.x + "," + d.y + ")" 

       // this is the thing 
       +"rotate(" + Math.random() * 50 + ")"; 
    }); 
}); 

На каждом тике я изменяя transform: rotate() к Math.random() * 50 в этом случае.

Теперь, что я хочу, это плавное вращение. Не этот отрывистый материал.

См. this, чтобы лучше понять, что я имею в виду. Представьте себе высоту как поворот. Серая коробка представляет то, что у меня есть сейчас, синий - что я хочу.

Я пробовал применить 'transition: all 1s ease' CSS к этому элементу, но он просто игнорирует его, я, очевидно, делаю это неправильно. Итак, как я могу сделать это бесконечным вращение назад и вперед, как если бы я использовал переходы CSS3?

+0

Вы можете применить переход в D3: https://jsfiddle.net/18na88m7/1/ –

ответ

2

Каждый тик вы произвольно устанавливаете вращение на что-то между 0 и 50 градусами вращения. Вам необходимо поддерживать текущее вращение, вычислять смещение, а затем устанавливать поворот на текущее + смещение.

Вот обновленная функция клещ:

force.on("tick", function(e) { 
    vis.selectAll("path") 
     .attr("transform", function(d) { 
     if(!d.rotate) { 
      d.rotate = Math.random() * 50; 
     } else { 
      d.rotate = d.rotate + 1; 
     } 
     return "translate(" + d.x + "," + d.y + ")" 
       +"rotate(" + d.rotate + ")"; 
    }); 
}); 

Вот обновленный рабочий пример: https://jsfiddle.net/1aLc7x4j/

+0

Ok здесь еще [скрипка] (http://jsfiddle.net/kor6ec2h/), чтобы проиллюстрировать, что у меня есть (серый ящик), и чего я хочу достичь (синяя рамка). Представьте себе, что высота коробки - это вращение. Вы заставили меня понять, что я не могу этого добиться, установив случайное вращение на каждый тик, если я не использую что-то вроде [шума Перлина] (http://3.bp.blogspot.com/-8lS7UCxUQRM/UGGq8keUy5I/AAAAAAAAAQ0/6QmeC_2zTpg /s1600/noise_vs_random.PNG) для генерации значений. – tohedalewomocofe

+0

Думаю, нам нужно сделать резервную копию. Что вы на самом деле пытаетесь сделать здесь? Что представляет собой ротация в вашей визуализации? Я подозреваю, что обратный вызов тика - это неправильное место для управления переходами в вашем случае, но без понимания вашей конечной цели трудно сказать. –

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