У меня довольно интересная проблема с SVG-анимацией.
Я оживляю по кругу, используя Рафаэля
obj = canvas.circle(x, y, size);
path = canvas.circlePath(x, y, radius);
path = canvas.path(path); //generate path from path value string
obj.animateAlong(path, rate, false);
Метод circlePath - это метод, который я создал сам для генерации траектории круга в нотации SVG-пути:
Raphael.fn.circlePath = function(x , y, r) {
var s = "M" + x + "," + (y-r) + "A"+r+","+r+",0,1,1,"+(x-0.1)+","+(y-r)+" z";
return s;
}
Пока все хорошо - все работает. У меня есть объект (объект), анимирующийся по круговому пути.
НО:
Анимация работает только в том случае, если я создаю объект с такими же координатами X, Y, что и сам путь.
Если я запускаю анимацию с любых других координат (скажем, на полпути вдоль пути), объект анимируется по кругу правильного радиуса, однако он начинает анимацию с координат X, Y объекта, а не вдоль путь, как он отображается визуально.
В идеале я хотел бы иметь возможность остановить / запустить анимацию - та же проблема возникает при перезапуске. Когда я останавливаюсь, затем перезапускаю анимацию, она оживляет по кругу, начиная с остановленных X, Y.
UPDATE
Я создал страницу, демонстрирующую проблему:
http://infinity.heroku.com/star_systems/48eff2552eeec9fe56cb9420a2e0fc9a1d3d73fb/demo
Нажмите «Пуск», чтобы запустить анимацию.
Когда вы останавливаете и перезапускаете анимацию, она продолжается от текущих координат круга в круг правильных размеров.