2013-05-23 5 views
3

Я хотел бы анимировать элемент SVG с помощью Dart. Это медленно перемещает RectElement пакета «dart: svg» из одной координаты y в другую. К сожалению, я не смог найти пример. Я также попытался использовать пакет анимации, найденный здесь here, но, похоже, он не работает с элементами SVG.Анимировать элемент SVG с помощью дротика

ответ

3

Вы можете добиться этого с помощью кадров анимации и обновления атрибутов у (имея в виду, что это строка):

import 'dart:html'; 
import 'dart:svg'; 
import 'dart:async'; 

RectElement rect; 
int pos = 0; 
int dest = 300; 

void main() { 
    // Get a reference to the element 
    rect = query("#rect"); 
    // Start the animation 
    window.animationFrame.then(animate);  
} 

void animate(num delta) { 
    // Keep moving the element down until we reach the destination 
    if(pos < dest) { 
    pos += 2; 
    rect.attributes['y'] = pos.toString(); 
    // Continue the animation 
    window.animationFrame.then(animate); 
    } 
} 

Edit: Switched из таймеров кадров анимации согласно предложению Грега Лоу

+3

Я рекомендую изменить это, чтобы использовать document.animationFrame http://api.dartlang.org/docs/releases/latest/dart_html/Window.html#animationFrame. Это обеспечивает плавную анимацию. В зависимости от эффекта, который вы хотите достичь, вы, вероятно, можете использовать анимацию css. В chrome это позволяет анимации выводиться из основного потока. –

+0

@GregLowe Спасибо за предложение. Есть ли причина, по которой обратный вызов требует num при отмене требует int? –

+2

Попробуйте вместо этого использовать window.animationFrame. Вам нужно явно перерегистрировать его в каждом цикле, поэтому не нужно отменять, просто не перерегистрируйте, когда вы закончите. У Сета есть пример здесь http://stackoverflow.com/questions/15753170/how-do-drive-an-animation-loop-at-60fps-with-dart –

1

Я понимаю, что этот вопрос старый, однако, несколько дней назад я wrote an example об этом в своем блоге.

Это использует пакет паб tweenengine шаги в основном:

  • Создание аксессора для любого элемента SVG вы пытаетесь оживить
  • создать TweenManager
  • на вашем window.animation. затем() вызовите обновление tweenmanager.

Я также создал для него gist.

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