加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – 是否可以使用鼠标向下和向上事件模拟鼠标单击

发布时间:2020-12-15 01:47:41 所属栏目:百科 来源:网络整理
导读:之前的一个问题让我思考.是否可以通过首先触发MOUSE_DOWN然后触发MOUSE_UP来模拟MouseEvent.CLICK被触发. 根据Adobe的推文. “…对于要发生的点击事件,它必须始终按照发生的顺序跟随这一系列事件:mouseDown事件,然后是mouseUp.这两个事件的目标对象必须相同
之前的一个问题让我思考.是否可以通过首先触发MOUSE_DOWN然后触发MOUSE_UP来模拟MouseEvent.CLICK被触发.

根据Adobe的推文.
“…对于要发生的点击事件,它必须始终按照发生的顺序跟随这一系列事件:mouseDown事件,然后是mouseUp.这两个事件的目标对象必须相同;否则不会发生click事件任何数量的其他鼠标事件都可以在mouseDown或mouseUp事件之间的任何时间发生; click事件仍然会发生.“ http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/InteractiveObject.html#event:click

从我的测试中可以看出,CLICK事件不是从ActionScript 3事件队列构造的.或者代码有问题?

看到:

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;

[SWF(backgroundColor="0xFFFFFF",frameRate="30",width="800",height="600")]

public class Test extends Sprite
{
    private var spr:Sprite = new Sprite();
    public function Test()
    {
        trace("Test()");
        this.addEventListener(Event.ADDED_TO_STAGE,init);
    }
    public function init(e:Event):void
    {
        trace("init()");
        spr.graphics.beginFill(0xFF0000);
        spr.graphics.drawRect(0,200,80);
        spr.graphics.endFill();
        addChild(spr);
        addEventListener(Event.ENTER_FRAME,onEnterFrame);
        spr.addEventListener(MouseEvent.CLICK,onClick);
    }
    private var tick:int = 0;
    private function onEnterFrame(e:Event):void
    {
        if (tick == 1) spr.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN,true,false));
        if (tick == 2) spr.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP,false));
        if (tick == 3) spr.dispatchEvent(new MouseEvent(MouseEvent.CLICK,false));
        tick++;
    }
    private function onClick(e:MouseEvent):void
    {
        trace("onClick() MouseEvent.CLICK dispatched"); 
    }
}
}

我应该得到两个’onClick()’事件而不是一个.

解决方法

你不能这样做的原因是所有三种类型都是由插件创建的,并且不依赖于彼此.

按下交互式对象后会立即触发MouseEvent.MOUSE_DOWN.
释放鼠标后会立即触发MouseEvent.MOUSE_UP,它不依赖于鼠标单击已在同一InteractiveObject中启动MOUSE_DOWN.
MouseEvent.CLICK仅在两个事件发生在同一对象中时触发,而光标不会在鼠标向下和鼠标向上的对象之间留下对象.

所以你可以看到有一个简单的情况,或两个偶数,其中MOUSE_DOWN和MOUSE_UP都被触发,但没有调用CLICK,因为事件不是CLICK.

此外,简单地调度MouseEvent.CLICK事件的能力使得通过触发多个鼠标事件(仅调用一个鼠标事件)来创建虚假用户交互是不必要的.必须跟踪在鼠标按下侦听器中单击的每个对象是很尴尬的,以便检查moue也应该触发单击.当ROLL_OUT事件发生时,您还需要删除引用.

简而言之,CLICK事件实际上远远超过MOUSE_DOWN和MOUSE_UP事件.它还管理事件连续发生在同一显示对象上而不离开对象.当发生这种情况时,只有当发生这种情况时,flash才会调度CLICK事件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读