Здравствуйте
У меня есть список вертикальный
При наведении мышки на определенные области он скроллируется вверх-вниз с использованием ms:AnimateProperty. Скроллируется вниз до конца и вверх до конца, а не пошагово с шагом в высоту каждого из айтемов.
Анимация
scrollAnimationSlow долгая, список начинает скроллироваться медленно, затем ускоряется и в конце анимации снова замедляется (Cubic.easeInOut)
При отведении от области я ставлю
scrollAnimationSlow на паузу и запускаю другую анимацию
linearPauseAnimation скроллирования списка для того чтобы притормозить.
Я не вижу решения для нахождения значений для
linearPauseAnimation для каждого из моментов времени.
Если выставить одни значения для
linearPauseAnimation, то она "перехватывает" основную медленную анимацию без рывков только когда основная "разогналась" и к ней не применяются easing (так сказать)
Если же попытаться остановить основную анимацию
scrollAnimationSlow во время разгона или торможения и после нее запустить анимацию
linearPauseAnimation происходит, естественно, рывок.
Каким образом я могу в любой из моментов времени затормозить анимацию так чтобы она остановилась с замедлением ?

Код AS3:
<fx:Declarations>
<mx:AnimateProperty id="scrollAnimationSlow"
duration="3000"
toValue="{scrollPosY}"
target="{list.dataGroup}"
property="verticalScrollPosition"
easingFunction="Cubic.easeInOut"
effectStart="scrollAnimationSlow_effectStartHandler(event)"
effectEnd="scrollAnimationSlow_effectEndHandler(event)"/>
<mx:AnimateProperty id="linearPauseAnimation"
duration="1000"
target="{list.dataGroup}"
property="verticalScrollPosition"
easingFunction="Cubic.easeOut"
effectStart="linearPauseAnimation_effectStartHandler(event)"
effectEnd="linearPauseAnimation_effectEndHandler(event)"/>
</fx:Declarations>
-------------------------------------------------
protected function upDirectionArrow_rollOverHandler(event:MouseEvent):void
{
scrollPosY=0;
scrollAnimationSlow.play();
dispatchEvent(new Event("sliderAnimationStarted"));
}
protected function upDirectionArrow_rollOutHandler(event:MouseEvent):void
{
if(scrollAnimationSlow.isPlaying)
{
scrollAnimationSlow.stop();
atPausePosition=list.dataGroup.verticalScrollPosition-100;
if(atPausePosition<0)
{
atPausePosition=0;
}
linearPauseAnimation.toValue=atPausePosition;
linearPauseAnimation.play();
dispatchEvent(new Event("sliderAnimationStarted"));
}
}
protected function downDirectionArrow_rollOverHandler(event:MouseEvent):void
{
scrollPosY=list.dataGroup.contentHeight-list.height;
scrollAnimationSlow.play();
dispatchEvent(new Event("sliderAnimationStarted"));
}
protected function downDirectionArrow_rollOutHandler(event:MouseEvent):void
{
if(scrollAnimationSlow.isPlaying)
{
scrollAnimationSlow.stop();
atPausePosition=list.dataGroup.verticalScrollPosition+100;
if(atPausePosition>(list.dataGroup.contentHeight-list.height))
{
atPausePosition=list.dataGroup.contentHeight-list.height;
}
linearPauseAnimation.toValue=atPausePosition;
linearPauseAnimation.play();
dispatchEvent(new Event("sliderAnimationStarted"));
}
}