Как принудить анимацию в Raphaël работать «туда-сюда», а не «только туда»?

Используя jQuery и Raphaël (в данном случае можно было бы обойтись и одним Raphaël, но важно не это), соорудим простой холст и на нём анимированный кружок:

<!doctype html>
<html>
<head>
<style>
body {
   background-color: #ffffff;
}
#canvasParent {
   width: 700px;
   margin-left: auto;
   margin-right: auto;
}
</style>
<script src="/jq.js"></script>
<script src="/raphael.js"></script>
<script>
tableList = [];
$(function(){
   var h = 700;
   var w = 700;
   paper = Raphael('canvasParent', h, w);
   paper.rect(0,0, h, w, 2).attr('stroke', '#000');
   paper.circle(50, 40, 10).attr("fill", "#f00").attr("stroke", "#fff").animate(
      Raphael.animation(
         { transform: 'S2' }, 4000, '<'+'>'
      ).repeat(Infinity)
   );
});
</script>
</head>
<body>
<div id="canvasParent">
</div>
</body>
</html>


Кружок плавно вспучивается от радиуса 10px до радиуса 20px за четыре секунды, затем рывком возвращается к первоначальному размеру, и всё повторяется сначала до бесконечности.


Внимание, вопрос: как сделать так, чтобы кружок после плавного вспучивания не менее плавно скукоживался бы, и так до бесконечности?


Иными словами: можно ли (и как именно) в Raphaël зациклить не один, а несколько шагов анимации? (Например, пару шагов именно таких, чтобы второй шаг анимации был противоположен первому шагу и медленно возвращал объект в исходное состояние?)
  • Вопрос задан
  • 3207 просмотров
Решения вопроса 1
@northicewind
можно попробовать сделать двумя функциями
...
var circle = paper.circle(50, 40, 10).attr("fill", "#f00").attr("stroke", "#fff");
function animate_in() {
circle.animate({...}, 4000, animate_out);
}
function animate_out() {
circle.animate({...}, 4000, animate_in);
}
animate_in();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы