actionscript-3 – 是否可以使用鼠标向下和向上事件模拟鼠标单击
之前的一个问题让我思考.是否可以通过首先触发MOUSE_DOWN然后触发MOUSE_UP来模拟MouseEvent.CLICK被触发.
根据Adobe的推文. 从我的测试中可以看出,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. 所以你可以看到有一个简单的情况,或两个偶数,其中MOUSE_DOWN和MOUSE_UP都被触发,但没有调用CLICK,因为事件不是CLICK. 此外,简单地调度MouseEvent.CLICK事件的能力使得通过触发多个鼠标事件(仅调用一个鼠标事件)来创建虚假用户交互是不必要的.必须跟踪在鼠标按下侦听器中单击的每个对象是很尴尬的,以便检查moue也应该触发单击.当ROLL_OUT事件发生时,您还需要删除引用. 简而言之,CLICK事件实际上远远超过MOUSE_DOWN和MOUSE_UP事件.它还管理事件连续发生在同一显示对象上而不离开对象.当发生这种情况时,只有当发生这种情况时,flash才会调度CLICK事件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |