У меня проблема с тем, что мне кажется совершенно безупречным простым кодом Raphael.js, чтобы анимировать путь, перемещающийся из одного места в другое, используя метод .animate()
по атрибуту path:
, передавая путь в новом месте.Рафаэль. Анимация по атрибуту пути перескакивает из одного состояния в другое, без перехода
Но вместо плавного перехода от старого пути к новому он приостанавливается на некоторое время, равное времени перехода, а затем переходит прямо к концу анимации.
Все, что я вижу в коде, похоже, соответствует документации и стандартным шаблонам, и поскольку это не сбой, а непредвиденное поведение, у меня нет сообщений или прямой обратной связи для работы.
Анимация работает, но пропускает промежуточные шаги перехода. Как почему?
Вот JSBIN live demo кода ...
... и вот пример кода.
var paper = Raphael("huh", '100%', '100%');
paper.customAttributes.pathX = function(x) {
var path = this.attr('path');
var origin = getPathOrigin(path);
return { path: Raphael.transformPath(path, ['T', x - origin.x, 0 ]) };
};
paper.customAttributes.pathY = function(y) {
var path = this.attr('path');
var origin = getPathOrigin(path);
return { path: Raphael.transformPath(path, ['T', 0, y - origin.y]) };
};
paper.customAttributes.pathXY = function(x,y) {
var path = this.attr('path');
var origin = getPathOrigin(path);
return { path: Raphael.transformPath(path, ['T', x - origin.x, y - origin.y ]) };
};
function getPathOrigin(path) {
return {x: path[0][1], y: path[0][2]};
}
var path = paper.path('M 100 100 L 105 105 L 95 105 L 95 95 L 105 95 L 100 100');
var origin = getPathOrigin(path);
path.attr({pathX: origin.x, pathY: origin.y, pathXY: [origin.x, origin.y]});
path.animate({pathX: 200},1000, 'linear', function(){
path.animate({pathY: 200},1000, 'elastic', function(){
path.animate({pathXY: [50,50]}, 1000, 'bounce');
});
});
path.animate({pathX: 200},1000, 'linear');