![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
|
Уважаемые, нужна ваша помощь. Как сделать задержку, чтобы событие ROLL_OVER происходило не сразу, а через 0,3 - 0,5 секунды? Где это правильно прописать? Спасибо.
|
|
|||||
|
ветеран форума
|
Можно расширить класс того, кому хотим задерживать, подписаться там на событие ROLL_OVER, и диспатчить вручную по таймауту наружу из экземпляра.
__________________
4am is time to rock |
|
|||||
|
Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
|
Уважаемые, что-то я совсем запарился... Дело в том, что я еще далеко не ас в AS и в английском языке. В хелпе по setTimeout мало что понял, а слова
Цитата:
Учусь в основном на примерах. Мне, в принципе, осталось доделать такое же юзабилити , как на сайте ibm.com. Там, если на флеше просто провести по кнопке мышкой, картинки не меняются. Чтобы новая картинка загрузилась, нужно наведенную на кнопку мышь подержать чуть-чуть подольше над кнопкой. Можете как-то поподробней объяснить или черкануть код (хотя бы примерный)? Заранее спасибо. |
|
|||||
|
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
1. Идём в гугл.
2. Пишем "setTimeout as3" и уже из 1-го линка по коду всё понятно и без знания анг. языка. А вообще Adobe рекомендует юзать Timer: Цитата:
Последний раз редактировалось Xpb7; 19.11.2008 в 13:04. |
|
|||||
|
Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
|
Ну, хорошо. Проверте мою логику непрограммиста (AS - мой первый язык).
1. При входе в OVER создаем таймер и запускаем его: btn_mc.addEventListener(MouseEvent.ROLL_OVER, creatTimer); function creatTimer(e.MouseEvent):void { var myTimer:Timer = new Timer(500)//на пол-секунды; myTimer.addEventListener("timer", newClip); myTimer.start(); } Если логика правильная, то как мне правильно сделать провеку ROLL_OVER? |
|
|||||
private var _timeoutId:int = -1; sprite.addEventListener(MouseEvent.ROLL_OVER, onSpriteMouseRollOver); sprite.addEventListener(MouseEvent.ROLL_OUT, onSpriteMouseRollOut); private function onSpriteMouseRollOver(event:MouseEvent):void { _timeoutId= setTimout(timeoutFunction, 500); } private function onSpriteMouseRollOut(event:MouseEvent):void { clearTimout(); } private function clearTimout():void { if (_timeoutId != -1) { clearTimeout(_timeoutId); _timeoutId = -1; } } private function timeoutFunction():void { clearTimout(); // do something } По поводу того, что лучше использовать Timer вместо setTimout очень спрорный вопрос. Зачем плодить тяжелую сущность, если нам нужно просто поставить таймаут, а больше никакая информация не нужна
__________________
Оптимизация производительности на уровне кода |
|
|||||
|
может и "тяжелая сущность", но выглядит изящнее на мой глаз:
timer = new Timer(500, 1); timer.addEventListener(TimerEvent.TIMER, timeoutFunction); sprite.addEventListener(MouseEvent.ROLL_OVER, onSpriteMouseRollOver); sprite.addEventListener(MouseEvent.ROLL_OUT, onSpriteMouseRollOut); ////// private function timeoutFunction(e:TimerEvent):void { trace("do something"); } private function onSpriteMouseRollOut(e:MouseEvent):void { timer.stop(); } private function onSpriteMouseRollOver(e:MouseEvent):void { timer.start(); } |
|
|||||
|
Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
|
Да, спасибо всем. Мне Таймер более понятен. Но у меня получается его использовать только для каждой кнопки отдельно. А вот в массиве я потерялся... куда его (Таймер) воткнуть?
У меня массивом реализовано (спасибо участникам форума ) увеличение кнопки и возвращение ее в рамер после наведения на другую кнопку. var btns:Array = [knop1_mc, knop2_mc, knop3_mc, knop4_mc]; var selectedButton:Sprite; for (var i:uint = 0; i < btns.length; i++){ btns[i].addEventListener(MouseEvent.ROLL_OVER, btnSizeControl); } function btnSizeControl(e:MouseEvent):void{ var bt:Sprite = e.currentTarget as Sprite; bt.mouseEnabled = false; if (selectedButton) { Tweener.addTween(selectedButton, {alpha:0.5, time:0.5}); Tweener.addTween(selectedButton, {scaleX:1, scaleY:1, time:0.5, transition:"easeout"}); selectedButton.mouseEnabled = true; } selectedButton = bt; Tweener.addTween(bt, {alpha:1, time:0.5}); Tweener.addTween(bt, {scaleX:1.07, scaleY:1.07, time:0.5, transition:"easeout"}); } |
|
|||||
|
по ROLL_OVER запускать не сами твины, а таймер:
var btns:Array=[knop1_mc,knop2_mc,knop3_mc,knop4_mc]; var currBut:Sprite; var prevBut:Sprite; var timer:Timer=new Timer(200,1); timer.addEventListener(TimerEvent.TIMER, startTween); for (var i:uint = 0; i < btns.length; i++) { btns[i].addEventListener(MouseEvent.ROLL_OVER, btnSizeControl); } function btnSizeControl(e:MouseEvent):void { if (! timer.running) {//на случай если перевели на следующую до срабатывания таймера prevBut=currBut; } currBut=e.currentTarget as Sprite; timer.start(); } function startTween(e:TimerEvent):void { if (prevBut) { Tweener.addTween(prevBut, {alpha:0.5,scaleX:1, scaleY:1, time:0.5, transition:"easeout"}); } if (currBut) { Tweener.addTween(currBut, {alpha:1,scaleY:1.07, scaleX:1.07, time:0.5, transition:"easeout"}); } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|