【问题标题】:How to use the same function for both a Timer event and Mouse event in AS3?如何在 AS3 中对 Timer 事件和 Mouse 事件使用相同的函数?
【发布时间】:2010-07-18 15:26:32
【问题描述】:

所以今天我的问题是,我们如何才能让 Timer 事件和 Mouse 事件同时触发 1 个函数? '试图避免仅仅因为我还有一个触发它的鼠标事件而不仅仅是一个定时器事件而必须重写/重命名一个函数。

问题:

我有一个 addThis 气泡在按钮滚动时带有图标淡入,addThis 气泡将在计时器完成后淡出,但我在该气泡中还有一个关闭按钮,它需要使用与计时器相同的功能. (想避免写2个完全相同的函数)

我希望这有一个简单的解决方法,比如 event:null 或其他东西。

定时器事件:

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 气泡淡出功能:

// 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

【问题讨论】:

    标签: flash actionscript-3 event-handling timer mouseevent


    【解决方案1】:

    您的问题是您将fadeOutShareIcons 参数输入到TimerEvent,因此它只能接受TimerEvent

    由于MouseEventTimerEventEvent 的后代,您可以使用它,这样两者就可以一起工作。如果您还想在不带参数的情况下调用相同的函数,您可以传递设置为 null 的默认值。

    • 案例一

      private function fadeOutShareIcons(e:Event):void
      
    • 使用默认参数的案例 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
        }
        //...
      }
      

    【讨论】:

    • 啊,我们走了:D 谢谢!此外,else if 语句也确实有很大帮助......
    【解决方案2】:

    将执行工作的代码放在一个单独的函数中,由两个事件处理程序调用是否有效?无论如何,您的主要工作函数似乎都没有使用事件参数,因此该工作是否在另一个函数中完成并不重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多