Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   ms:AnimateProperty остановка анимации с замедлением (http://www.flasher.ru/forum/showthread.php?t=185970)

djyamato 25.10.2012 12:26

ms:AnimateProperty остановка анимации с замедлением
 
Здравствуйте
У меня есть список вертикальный
При наведении мышки на определенные области он скроллируется вверх-вниз с использованием 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"));
                                }
                        }



Часовой пояс GMT +4, время: 07:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.