【问题标题】:Fake mouseclick on hover AS3假鼠标悬停 AS3
【发布时间】:2011-06-16 04:03:34
【问题描述】:

今天早上我偶然发现了这个问题:

悬停按钮时,是否可以在 X 秒后自动单击它?那么用户就不需要用鼠标点击了吗?

我怎样才能让 Flash 相信我的鼠标真的点击了舞台上的某个按钮或用 as3 调出?

我的电影中有很多按钮。所以我更喜欢使用一些代码来覆盖我电影中所有现有或即将出现的按钮的此功能。

我通常会使用这样的代码,但是否有一些解决方法可以以不同的方式完成此操作?我不想为每个按钮添加代码。

this.addEventListener(MouseEvent.OVER, onMouseClickEvent);

public function onMouseClickEvent(event:Event)
{
trace(event);
if(event.buttonDown) // if button goes down normally
trace("MOUSE CLICKED NORMALLY");
else
trace("left button was not down");
}

【问题讨论】:

    标签: actionscript-3 mouse mouseover


    【解决方案1】:

    我认为最简单的方法是继承 Button。 然后你应该添加鼠标悬停/移出监听器,添加看起来像这样的点击监听器 :public function clickListener(event:MouseEvent = null){...}

    当鼠标悬停时,引发鼠标在对象上的标志,启动计时器,当调用计时器回调函数时,检查是否标志(当鼠标离开时,将标志关闭) 为真,只需调用 clickListener()

    【讨论】:

      【解决方案2】:

      监听MouseEvent.MOUSE_OVER 并启动一个计时器,在该计时器结束时按钮将发送MouseEvent.CLICK 事件。在鼠标悬停处理程序中,使用 SystemManager 为 MouseEvent.MOUSE_OUT 添加一个侦听器,以取消计时器。计时器也使用 SystemManager 删除侦听器。点击按钮也是如此。

      【讨论】:

      • 我了解计时器。但是这样我必须为每个按钮设置这个。我想找到一个同时涵盖所有按钮的解决方案。有什么想法吗?
      • 使用 SystemManager 监听并将 useCapture arg 设置为 true。聆听页面上的所有内容,如果它是您想要的按钮之一,请在那里处理。
      • 或者你可以用你的容器来监听。它将获取所有的鼠标悬停事件。
      • 当您的计时器已过期且鼠标仍在对象上方时,您可以通过执行以下操作触发点击事件:myButton.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
      【解决方案3】:

      终于!解决了!

      这成功了:

      公共函数 runOnce(event:TimerEvent):void { btnSignal.dispatch("键盘", btnCode); }

      Robusto 和 Radoslav Georgiev:感谢您指出正确的方向!

      【讨论】:

        【解决方案4】:

        (我回答这个问题有点晚,但想为未来的人提供意见)。

        “给这只猫剥皮”的一种方法是让悬停事件触发一个计时器(即 3 秒)。在 EnterFrame 或其他函数中,当达到 3 秒时,让数字或布尔值发生变化。

        //Pseudo code
        
            if(timer == 3)
        { numberVar = 1;
        //or
        BooleanVar = True;
        }
        else
        {
        numberVar = 0;
        //or
        BooleanVar = false;
        }
        //end
        

        然后,就像您将方法连接到 mouseEvent 一样,连接这些相同的方法以在 numberVar == 1 或 BooleanVar == True 时触发。就是这样。

        为了超级简单和可读性,让您的 MouseClickEvent 只是 numberVar = 1 或 BooleanVar = True。

        随着时间的推移,这些实现变得超级简单,并且根据我的经验,它们“非常”防错。在拼写错误或其他情况下也易于修复。也没有超级难以捉摸的进口。希望有帮助。

        顺便说一句好问题(+ 1)

        :D

        【讨论】:

          猜你喜欢
          • 2012-05-10
          • 2011-08-04
          • 2018-09-03
          • 1970-01-01
          • 2015-04-22
          • 2011-05-26
          • 2017-10-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多