工具类如下:
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" />
相关推荐
本文将详细讲解如何在Flex项目中实现右键功能,并结合描述中的"点击右键会不断地画出小圆点"这一具体场景,深入探讨相关技术。 首先,让我们了解Flex中的右键事件处理。在Flex中,我们可以使用ContextMenu类来创建...
标题中的“支持火狐IE9的flex右键”指的是在Adobe Flex开发的Web应用程序中,实现对Firefox和Internet Explorer 9这两个浏览器的右键菜单功能的支持。Flex是一种基于ActionScript和MXML的开源框架,用于构建富互联网...
"Flex右键菜单例子"是一个专门针对Flex技术的右键菜单自定义解决方案。Flex是一种用于构建富互联网应用程序(RIA)的开放源代码框架,由Adobe公司开发。它基于ActionScript编程语言和MXML标记语言,主要用于创建交互式...
"RightMenu"文件可能包含了一个实现Flex右键菜单功能的项目。这个项目可能有以下几个关键部分: - ContextMenu类的实例化:源码中可能会有一个初始化ContextMenu的代码段,添加了菜单项和对应的事件处理函数。 - ...
在"flex右键例子"中,如果使用了第三方库来增强右键功能,那么相关库文件会放在这里。 通过分析这些文件,我们可以学习到如何在Flex中自定义右键菜单: - **右键事件监听**:在Flex中,我们可以使用`ContextMenu`...
在Flex开发中,有时我们需要为用户界面添加自定义的右键菜单,以便提供更多的交互功能。本教程将指导你如何在Flex项目中实现这一功能,主要涉及以下知识点: 1. **右键菜单库的引入**: 首先,你需要下载一个名为`...
这个“flex右键菜单代码”分享提供了一个实现Flex中右键菜单的示例,这对于提升用户体验和增强应用程序功能具有重要意义。 Flex是一个开源的、基于ActionScript和Flash Player的开发框架,主要用于创建富互联网应用...
在IT行业中,自定义Flex右键菜单是一项常见的需求,它涉及到用户交互体验的优化和界面定制化。Flex是一个基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。在这里,我们主要探讨如何在Flex项目中...
本话题我们将探讨如何使用Flex技术来实现一个自定义的右键菜单。Flex是一种基于ActionScript 3.0的开放源码框架,主要用于构建富互联网应用程序(RIA)。 首先,我们需要理解Flex的基本架构。Flex使用MXML和...
在Flex开发中,自定义右键菜单是一项常见的需求,它能为用户界面提供更丰富的交互体验。Flex是一款基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。在这里,我们将深入探讨如何在Flex中实现...
在Flex开发中,自定义右键菜单和实现多级右键菜单是一项常见的需求,它能够为用户界面提供更丰富的交互体验。Flex是一个基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用程序(RIA)。下面我们将深入...
接下来,我们关注`说明.txt`文件,它可能包含有关如何在Flex中实现右键功能的指导。通常,这会涉及到以下步骤: 1. 创建一个`ContextMenu`对象,这是Flex中的上下文菜单类,用于存放右键菜单项。 2. 在需要添加右键...
在Flex中实现右键菜单通常有两种方式,一种是通过Flex内置的ContextMenuItem类,另一种是通过第三方库RightClickManager。原生的ContextMenuItem类允许开发者创建和定制右键菜单,但在某些情况下可能不够灵活,例如...
压缩包中的`RightClickLib.swc`可能是一个库文件,它可能包含了预封装好的禁止右键功能,方便开发者直接引入到项目中使用。而`禁止鼠标右键.txt`文件很可能包含了更详细的说明或者额外的代码示例。 总之,禁止Flex...
本文将详细介绍如何在Flex中实现一个具有拖动连线、右键功能的流程图。我们将从以下几个关键知识点展开: 1. **Flex基础**:Flex是Adobe开发的一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA...
通过以上步骤,我们可以在Flex应用中实现屏蔽系统右键菜单并创建自定义菜单的功能,提升应用的交互性和用户体验。在实际开发中,还可以根据需求调整菜单的布局、样式以及响应的事件处理,以满足各种复杂场景的需求。
在Flex开发中,右键菜单是一项常见的功能需求,它能够为用户提供更为丰富的交互体验。本文将深入探讨如何在Flex环境中实现自定义的右键菜单,包括屏蔽浏览器的默认右键菜单,创建XML格式的多级菜单,以及设置菜单...
在Flex应用中,用户界面的交互性是关键,而右键菜单作为常见的用户交互元素,能够提供额外的功能选项,增强用户体验。本篇文章将深入探讨如何在Flex中自定义右键菜单。 一、Flex中的上下文菜单(Context Menu) ...
在Flex开发中,自定义右键菜单是一项常见的需求,它能提供更为丰富的用户交互体验,同时也能更好地符合应用的功能需求。本项目标题为"flex自制右键菜单",描述中提到作者从网上获取了相关代码并进行改写,实现了屏蔽...
在Flex开发中,右键菜单是用户交互的重要组成部分,它为用户提供了一种便捷的方式来访问上下文相关的操作。本文将深入探讨两种实现Flex自定义右键菜单的方法:系统右键菜单的扩展以及完全自定义的右键菜单。 1. **...