Как использовать одну и ту же функцию для события Timer и Mouse в AS3? - PullRequest
0 голосов
/ 18 июля 2010

поэтому сегодня мой вопрос: как мы можем иметь 1 функцию, запускаемую как событием Timer, так и событием Mouse?я пытаюсь избежать необходимости переписывать / переименовывать функцию только потому, что у меня есть событие Mouse, которое ее запускает, а не только событие Timer.

Проблема:

У меня естьВсплывающий пузырь addThis с иконками на переключении кнопок, всплывающий пузырь addThis исчезнет после завершения таймера, но у меня также есть кнопка закрытия в этом пузыре, которая должна использовать ту же функцию, что и таймер.(хочу избежать написания 2 абсолютно одинаковых функций)

Я надеюсь, что есть простое решение для подобного события: ноль или что-то еще.

Событие таймера:

private function overShareButton(event:MouseEvent):void
    {
        shareIconsTimer = new Timer(3000,1);
        shareIconsTimer.addEventListener(TimerEvent.TIMER, fadeOutShareIcons);
        shareIconsTimer.start();

        fadeInShareIcons();
    }

Событие кнопки закрытия:

shareIcons.btn_closeIcons.addEventListener(MouseEvent.MOUSE_UP, fadeOutShareIcons);

Функция addThis Bubble Fade out:

// Fade out the addThis Icons
    private function fadeOutShareIcons(e:TimerEvent):void
    {
        shareIcons.buttonMode = false;

        shareIcons.btn_closeIcons.buttonMode  = false;
        shareIcons.btn_email.buttonMode       = false;
        shareIcons.btn_facebook.buttonMode    = false;
        shareIcons.btn_myspace.buttonMode     = false;
        shareIcons.btn_digg.buttonMode        = false;
        shareIcons.btn_delicious.buttonMode   = false;
        shareIcons.btn_favorites.buttonMode   = false;
        shareIcons.btn_twitter.buttonMode     = false;
        shareIcons.btn_google.buttonMode      = false;
        shareIcons.btn_messenger.buttonMode   = false;
        shareIcons.btn_stumbleupon.buttonMode = false;

        // STOP TIMER & Remove share icon button events...
        shareIconsTimer.stop();
        shareIconsTimer.removeEventListener(TimerEvent.TIMER, fadeOutShareIcons);
        shareIcons.btn_email.removeEventListener       (MouseEvent.MOUSE_UP, addThisToEmail);
        shareIcons.btn_facebook.removeEventListener    (MouseEvent.MOUSE_UP, addThisToFacebook);
        shareIcons.btn_myspace.removeEventListener     (MouseEvent.MOUSE_UP, addThisToMyspace);
        shareIcons.btn_digg.removeEventListener        (MouseEvent.MOUSE_UP, addThisToDigg);
        shareIcons.btn_delicious.removeEventListener   (MouseEvent.MOUSE_UP, addThisToDelicious);
        shareIcons.btn_favorites.removeEventListener   (MouseEvent.MOUSE_UP, addThisToFavorites);
        shareIcons.btn_twitter.removeEventListener     (MouseEvent.MOUSE_UP, addThisToTwitter);
        shareIcons.btn_google.removeEventListener      (MouseEvent.MOUSE_UP, addThisToGoogle);
        shareIcons.btn_messenger.removeEventListener   (MouseEvent.MOUSE_UP, addThisToLive);
        shareIcons.btn_stumbleupon.removeEventListener (MouseEvent.MOUSE_UP, addThisToStumbleupon);

        TweenLite.to(shareIcons, .2, {alpha:0});
    }

Мой единственный выбор сейчас - создать еще одну функцию для обработки кнопки закрытия MouseEventЛюбые советы / мысли приветствуются!: D

Ответы [ 2 ]

5 голосов
/ 18 июля 2010

Ваша проблема в том, что вы набрали fadeOutShareIcons аргумент для TimerEvent, поэтому он может принимать только TimerEvent.

Поскольку MouseEvent и TimerEvent спускаются с Event, вы можете использовать его, чтобы оба могли работать вместе. Если вы также хотите вызвать ту же функцию без аргумента, вы можете передать значение по умолчанию, установленное на ноль.

  • дело 1

    private function fadeOutShareIcons(e:Event):void
    
  • case 2 с аргументом по умолчанию, поэтому вы можете вызвать fadeOutShareIcons()

    private function fadeOutShareIcons(e:Event=null):void
    
  • Вы также можете проверить, откуда произошло событие, проверив тип события:

    private function fadeOutShareIcons(e:Event=null):void {
      if (e==null) {
        // call directly
      } else if (e.type==MouseEvent.MOUSE_UP) {
          // came from mouse event
      } else if (e.type==TimerEvent.TIMER) {
          // came from timer event
      }
      //...
    }
    
1 голос
/ 18 июля 2010

Сработает ли помещение кода, который работает, в отдельную функцию, которая вызывается обоими обработчиками событий?Ваша основная рабочая функция, похоже, в любом случае не использует параметр события, поэтому не должно иметь значения, выполняется ли эта работа в другой функции.

...