Flex 右键 功能
发布时间:2020-12-15 03:39:30 所属栏目:百科 来源:网络整理
导读:工具类如下: RightClickManager.as package com.soa{import flash.display.DisplayObject;import flash.events.MouseEvent;import flash.external.ExternalInterface;import mx.controls.listClasses.IListItemRenderer;import mx.core.Application;public c
工具类如下: RightClickManager.as package com.soa { import flash.display.DisplayObject; import flash.events.MouseEvent; import flash.external.ExternalInterface; import mx.controls.listClasses.IListItemRenderer; import mx.core.Application; public class RightClickManager { static private var rightClickTarget:DisplayObject; static public const RIGHT_CLICK:String="rightClick"; static private const javascript:XML=<script> <![CDATA[ function(flashObjectId) { var RightClick = { init: function (flashObjectId) { this.FlashObjectID = flashObjectId; this.Cache = this.FlashObjectID; if(window.addEventListener){ window.addEventListener("mousedown",this.onGeckoMouse(),true); } else { document.getElementById(this.FlashObjectID).parentNode.onmouseup = function() { document.getElementById(RightClick.FlashObjectID).parentNode.releaseCapture(); } document.oncontextmenu = function(){ if(window.event.srcElement.id == RightClick.FlashObjectID) { return false; } else { RightClick.Cache = "nan"; }} document.getElementById(this.FlashObjectID).parentNode.onmousedown = RightClick.onIEMouse; } },killEvents: function(eventObject) { if(eventObject) { if (eventObject.stopPropagation) eventObject.stopPropagation(); if (eventObject.preventDefault) eventObject.preventDefault(); if (eventObject.preventCapture) eventObject.preventCapture(); if (eventObject.preventBubble) eventObject.preventBubble(); } },onGeckoMouse: function(ev) { return function(ev) { if (ev.button != 0) { RightClick.killEvents(ev); if(ev.target.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) { RightClick.call(); } RightClick.Cache = ev.target.id; } } },onIEMouse: function() { if (event.button ==2||event.button==0) { if(window.event.srcElement.id == RightClick.FlashObjectID && RightClick.Cache == RightClick.FlashObjectID) { RightClick.call(); } document.getElementById(RightClick.FlashObjectID).parentNode.setCapture(); if(window.event.srcElement.id) RightClick.Cache = window.event.srcElement.id; } },call: function() { document.getElementById(this.FlashObjectID).rightClick(); } } RightClick.init(flashObjectId); } ]]> </script>; public function RightClickManager() { return; } static public function regist():Boolean { if (ExternalInterface.available) { ExternalInterface.call(javascript,ExternalInterface.objectID); ExternalInterface.addCallback("rightClick",dispatchRightClickEvent); Application.application.addEventListener(MouseEvent.MOUSE_OVER,mouSEOverHandler); } // end if return true; } static private function mouSEOverHandler(event:MouseEvent):void { rightClickTarget=DisplayObject(event.target); //trace(rightClickTarget.name); //rightClickTarget = (rightClickTarget is IListItemRenderer)?rightClickTarget:null; // 如果不是在列表上,则取消右键事件 return; } static private function dispatchRightClickEvent():void { var event:MouseEvent; if (rightClickTarget != null) { //trace(rightClickTarget) event=new MouseEvent(RIGHT_CLICK,true,false,rightClickTarget.mouseX,rightClickTarget.mouseY); rightClickTarget.dispatchEvent(event); } // end if return; } //添加在不希望出现右键菜单比如弹出窗口上 .执行即可 static public function setRightClickTargetNULL():void { rightClickTarget=null; } } } RightClickRegister.as package com.soa { import flash.display.Sprite; import mx.utils.NameUtil; [Event(name="rightClick",type="flash.events.MouseEvent")] public dynamic class RightClickRegister extends Sprite { private var rightClickRegisted:Boolean=false; public function RightClickRegister() { if (!rightClickRegisted) { RightClickManager.regist(); rightClickRegisted=true; } try { name=NameUtil.createUniqueName(this); } catch (e:Error) { } return; } public override function toString():String { return NameUtil.displayObjectToString(this); } } } 调用例子如下: rightClick.mxml <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()"> <fx:Declarations> <!-- Place non-visual elements (e.g.,services,value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ import com.soa.RightClickManager; import com.soa.RightClickRegister; import mx.controls.Alert; protected var rightClickRegisted:Boolean = false; private function init():void { if (!rightClickRegisted) { RightClickManager.regist(); rightClickRegisted = true; } lae.addEventListener(RightClickManager.RIGHT_CLICK,treeRightClickHandler); } private function treeRightClickHandler(eve:MouseEvent):void { Alert.show((eve.target as Label).text ); } private function c():void{Alert.show("2222");} ]]> </fx:Script> <s:Label id="lae" x="284" y="246" width="141" height="123" fontSize="36" text="1111" click="c()"> </s:Label> </s:Application>顺序说一下: html-template/index.template.html 中需要增加 <param name="wmode" value="opaque" /> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |