Я пытаюсь играть с переходами d3 - мне нужно делать и переводить, и вращать. У меня есть оригинальные координаты:d3 переводить поворот порядка при переходе
let data = [
{x: 100, y: 100, rotation: 45},
];
и 2 прямоугольников. Один делает перевод сначала, второй выполняет ротацию .
Это в результате преобразования после рисования прямоугольников:
transform="rotate(45 115 105) translate(100, 100)"
transform="translate(100, 100) rotate(45 115 105)"
они имеют те же транслируют и вращают преобразования, единственное, что отличает это их порядок.
Затем я изменяю данные:
data[0].x += 30;
data[0].y += 20;
data[0].rotation += 45;
, и я бы ожидать, чтобы получить какой-то переход в конечном итоге с этой трансформации:
transform="rotate(90 145 125) translate(130, 120)"
transform="translate(130, 120) rotate(90 145 125)"
но то, что я действительно получаю это:
transform="translate(150, 110) rotate(90)"
transform="translate(400, 100) rotate(90)"
- Извещение об изменении порядка перевода для первого прямоугольника.
- он также удаляет центр вращения из поворотного преобразования (он как-то вычисляет его во время перехода?)
- как он получит результирующие числа?
Как работает переход d3? Мне нужно получить ожидаемый результат, так как я пытаюсь играть с более продвинутыми переходами.
Вот простой пример: https://jsfiddle.net/pp6npw4g/2 (нажмите, чтобы начать движение перехода)
Не связано с вашей реальной проблемой, но просто для краткости, ясности и для получения любого возможного источника ошибки: в вашем JSFiddle вы выполняете '.attr ('transform', (d) => transformFunction (d)); ', который просто переносит вызов' transformFunction() 'в еще одну анонимную функцию. Это в основном эквивалентно '.attr ('transform', transformFunction),' просто передавая ссылку на функцию. – altocumulus
Я знаю, это просто пример. В реальном приложении я делаю больше вещей, а не только один вызов функции. Но вы правы, в этом примере это может быть упрощено. – Klinki
Ничего! Просто многие люди путаются по этому поводу. Престижность для упрощения и предоставления урезанного примера вместо простого сброса всего кода! – altocumulus