`

Flex 右键 功能

    博客分类:
  • Flex
阅读更多

工具类如下:

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中的右键事件处理。在Flex中,我们可以使用ContextMenu类来创建...

    支持火狐IE9的flex右键

    标题中的“支持火狐IE9的flex右键”指的是在Adobe Flex开发的Web应用程序中,实现对Firefox和Internet Explorer 9这两个浏览器的右键菜单功能的支持。Flex是一种基于ActionScript和MXML的开源框架,用于构建富互联网...

    Flex右键菜单例子

    "Flex右键菜单例子"是一个专门针对Flex技术的右键菜单自定义解决方案。Flex是一种用于构建富互联网应用程序(RIA)的开放源代码框架,由Adobe公司开发。它基于ActionScript编程语言和MXML标记语言,主要用于创建交互式...

    Flex右键菜单 flex tree 右键菜单 源码

    "RightMenu"文件可能包含了一个实现Flex右键菜单功能的项目。这个项目可能有以下几个关键部分: - ContextMenu类的实例化:源码中可能会有一个初始化ContextMenu的代码段,添加了菜单项和对应的事件处理函数。 - ...

    flex右键例子源码

    在"flex右键例子"中,如果使用了第三方库来增强右键功能,那么相关库文件会放在这里。 通过分析这些文件,我们可以学习到如何在Flex中自定义右键菜单: - **右键事件监听**:在Flex中,我们可以使用`ContextMenu`...

    Flex添加右键菜单

    在Flex开发中,有时我们需要为用户界面添加自定义的右键菜单,以便提供更多的交互功能。本教程将指导你如何在Flex项目中实现这一功能,主要涉及以下知识点: 1. **右键菜单库的引入**: 首先,你需要下载一个名为`...

    flex右键菜单代码

    这个“flex右键菜单代码”分享提供了一个实现Flex中右键菜单的示例,这对于提升用户体验和增强应用程序功能具有重要意义。 Flex是一个开源的、基于ActionScript和Flash Player的开发框架,主要用于创建富互联网应用...

    自定义Flex右键菜单

    在IT行业中,自定义Flex右键菜单是一项常见的需求,它涉及到用户交互体验的优化和界面定制化。Flex是一个基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。在这里,我们主要探讨如何在Flex项目中...

    flex实现右键菜单

    本话题我们将探讨如何使用Flex技术来实现一个自定义的右键菜单。Flex是一种基于ActionScript 3.0的开放源码框架,主要用于构建富互联网应用程序(RIA)。 首先,我们需要理解Flex的基本架构。Flex使用MXML和...

    Flex自定义右键菜单

    在Flex开发中,自定义右键菜单是一项常见的需求,它能为用户界面提供更丰富的交互体验。Flex是一款基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA)。在这里,我们将深入探讨如何在Flex中实现...

    flex 自定义右键菜单 多级右键菜单

    在Flex开发中,自定义右键菜单和实现多级右键菜单是一项常见的需求,它能够为用户界面提供更丰富的交互体验。Flex是一个基于ActionScript 3.0的开放源代码框架,用于构建富互联网应用程序(RIA)。下面我们将深入...

    Flex右键支持

    接下来,我们关注`说明.txt`文件,它可能包含有关如何在Flex中实现右键功能的指导。通常,这会涉及到以下步骤: 1. 创建一个`ContextMenu`对象,这是Flex中的上下文菜单类,用于存放右键菜单项。 2. 在需要添加右键...

    flex右键菜单RightClickManager 非Application也可以弹出

    在Flex中实现右键菜单通常有两种方式,一种是通过Flex内置的ContextMenuItem类,另一种是通过第三方库RightClickManager。原生的ContextMenuItem类允许开发者创建和定制右键菜单,但在某些情况下可能不够灵活,例如...

    flex禁止鼠标右键源码

    压缩包中的`RightClickLib.swc`可能是一个库文件,它可能包含了预封装好的禁止右键功能,方便开发者直接引入到项目中使用。而`禁止鼠标右键.txt`文件很可能包含了更详细的说明或者额外的代码示例。 总之,禁止Flex...

    flex设计的流程图拖动连线右键功能实现源码

    本文将详细介绍如何在Flex中实现一个具有拖动连线、右键功能的流程图。我们将从以下几个关键知识点展开: 1. **Flex基础**:Flex是Adobe开发的一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(RIA...

    flex屏蔽系统右键菜单 & 自定义菜单

    通过以上步骤,我们可以在Flex应用中实现屏蔽系统右键菜单并创建自定义菜单的功能,提升应用的交互性和用户体验。在实际开发中,还可以根据需求调整菜单的布局、样式以及响应的事件处理,以满足各种复杂场景的需求。

    Flex 实现右键菜单

    在Flex开发中,右键菜单是一项常见的功能需求,它能够为用户提供更为丰富的交互体验。本文将深入探讨如何在Flex环境中实现自定义的右键菜单,包括屏蔽浏览器的默认右键菜单,创建XML格式的多级菜单,以及设置菜单...

    flex自定义右键菜单

    在Flex应用中,用户界面的交互性是关键,而右键菜单作为常见的用户交互元素,能够提供额外的功能选项,增强用户体验。本篇文章将深入探讨如何在Flex中自定义右键菜单。 一、Flex中的上下文菜单(Context Menu) ...

    flex自制右键菜单

    在Flex开发中,自定义右键菜单是一项常见的需求,它能提供更为丰富的用户交互体验,同时也能更好地符合应用的功能需求。本项目标题为"flex自制右键菜单",描述中提到作者从网上获取了相关代码并进行改写,实现了屏蔽...

    flex 自定义右键菜单

    在Flex开发中,右键菜单是用户交互的重要组成部分,它为用户提供了一种便捷的方式来访问上下文相关的操作。本文将深入探讨两种实现Flex自定义右键菜单的方法:系统右键菜单的扩展以及完全自定义的右键菜单。 1. **...

Global site tag (gtag.js) - Google Analytics