在网上发现了一篇相关的BLOG,地址如下:
http://www.flex-flex.net/blog/article.asp?id=12
完全屏蔽FLEX右键菜单比当初想象的要难一些,因为大多数FLEX文档中仅仅介绍了如何隐藏一部分FLEX右键菜单,例如:
代码 复制 - 运行
varcontextMenu:ContextMenu=newContextMenu();
contextMenu.hideBuiltInItems();//隐藏一些内建的鼠标右键菜单项
但是这个功能不能隐藏"设置"和"关于"右键菜单,而在一些应用中,希望能够利用鼠标右键完成一些操作功能,例如绘图程序和游戏等,这时候右键菜单就是"欲除之而后快"了.但在FLEX中监听mouseDown捕获不了右键事件,而在ContextMenu的Select事件也无法屏蔽.
其基本思路为:
1,在FLEX中利用外部接口注册一个函数,作为接收外部(HTML)右键事件的入口
2,在FLEX应用所在的HTML中拦截鼠标右键事件,调用FLEX外部函数,并取消事件的广播,以阻止事件到达FLEX应用.
3,在FLEX应用程序上监听mouseOver事件,并记录当前鼠标所在对象
4,当入口函数接收到HTML发送的右键事件后,模拟生成一个鼠标右键事件(buttonDown=false),并发送到当前对象
5,在对象的mouseDown处理函数中,根据buttonDown的标志,分别处理鼠标左右键事件
这个思路比较清晰可行,鼠标右键事件的流程为:
HTML鼠标右键事件----FLEX外部函数-----模拟的鼠标右键事件------相应的处理函数
具体的实现为:
1,在FLEX所在的HTML增加(注意根据自己的OBJECTID更改"FlexTest")
<script>
functiononNsRightClick(e){
if(e.which==3){
FlexTest.openRightClick();
e.stopPropagation();
}
returnfalse;
}
functiononIeRightClick(e){
if(event.button>1){
FlexTest.openRightClick();
parent.frames.location.replace(javascript:parent.falseframe);
}
returnfalse;
}
if(navigator.appName=="Netscape"){
document.captureEvents(Event.MOUSEDOWN);
document.addEventListener("mousedown",onNsRightClick,true);
}
else{
document.onmousedown=onIeRightClick;
}
</script>
2,修改FLEX的MXML
增加初始化和MOUSEOVER事件处理函数
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"initialize="init()"mouseOver="getMouseTarget(event)">
增加MXscript
importmx.events.MenuEvent;
importmx.controls.Alert;
privatevarmouseTarget:DisplayObject;
functioninit()
{
ExternalInterface.addCallback("openRightClick",openRightClick);
}
functiongetMouseTarget(event:MouseEvent):void
{
mouseTarget=DisplayObject(event.target);
}
functionopenRightClick():void
{
vare:MouseEvent=newMouseEvent(MouseEvent.MOUSE_DOWN,true,false,mouseTarget.mouseX,mouseTarget.mouseY);
mouseTarget.dispatchEvent(e);
}
functionshowMouseEvent(event)
{
if(event.buttonDown==true)
Alert.show("Left");
else
Alert.show("Right");
}
<mx:Imagex="0"y="10"id="bbb"name="bbb"source="res/15.jpg"mouseDown="showMouseEvent(event)"height="247"/>
具体的方法就是修改wmode参数,将wmode设置为opaque或transparent都可以达到这个效果
AC_FL_RunContent(
"src","playerProductInstall",
"FlashVars","MMredirectURL="+MMredirectURL+&MMplayerType=+MMPlayerType+
&MMdoctitle=+MMdoctitle+"",
"width","100%",
"height","100%",
"align","middle",
"id","FlexTest",////OBJECTID
"wmode","opaque",//////////////////////注意:这里是关键
"quality","high",
"bgcolor","#869ca7",
"name","FlexTest",
"allowscriptAccess","sameDomain",
"type","application/x-shockwave-flash",
"pluginspage","http://www.adobe.com/go/getflashplayer"
);
ADOBE文档中对wmode的解释:
SetstheWindowModepropertyoftheSWFfilefortransparency,layering,andpositioninginthebrowser.Validvaluesofwmodearewindow,opaque,and
transparent.
SettowindowtoplaytheSWFinitsownrectangularwindowonawebpage.
Settoopaquetohideeverythingonthepagebehindit.
SettotransparentsothatthebackgroundoftheHTMLpageshowsthroughalltransparentportionsoftheSWFfile.Thiscanslowanimationperformance.
TomakesectionsofyourSWFfiletransparent,youmustsetthealphapropertyto0.Tomakeyourapplicationsbackgroundtransparent,setthealpha
propertyonthe<mx:Application>tagto0.
Thewmodepropertyisnotsupportedinallbrowsersandplatforms.
现在就可以灵活的使用鼠标右键功能了!在IE6和FF2.0中测试通过
当然还有几个问题:
1,据JOVE的介绍,在IE7中需要添加
event.stopPropagation();
event.cancelBubble=true;
因此还需要对浏览器进行一下判断,我没有装IE7,也就没有测,需要的朋友可以测试一下
2,一些有用的右键菜单,例如TEXT中能够自动弹出剪贴复制等功能的右键菜单,也没有了,真是有一利必有一弊啊!不过这个还比较简单,可以再模拟一个ContextMenu的Select事件.
3,对初始化流程应再进行一些改进,以保证FLEX的加载和外部接口建立成功后,再加以使用.
分享到:
相关推荐
完全屏蔽flex自带的右键菜单,实现自定义右键菜单,附件有完整可运行的例子。 这个问题折腾了一天多,在网上搜了很多资料,几乎都是一样的,转来转去,且讲的不明不白。这里我提供了可运行的全部代码,让你轻松搞定...
通过以上步骤,我们可以在Flex应用中实现屏蔽系统右键菜单并创建自定义菜单的功能,提升应用的交互性和用户体验。在实际开发中,还可以根据需求调整菜单的布局、样式以及响应的事件处理,以满足各种复杂场景的需求。
在这里,我们将深入探讨如何在Flex中实现自定义的右键菜单。 首先,我们要了解Flex中的菜单组件。在Flex SDK中,`mx.controls.Menu`类是用于创建菜单的基本元素。它支持创建多级菜单,并且可以与按钮、列表等其他...
总之,在Flex中实现自定义右键菜单和多级右键菜单,主要涉及到ContextMenu类、MenuItem类以及事件监听器的使用。通过灵活组合这些元素,可以创建出满足不同需求的右键菜单系统,为用户提供更便捷的操作方式。
"RightMenu"文件可能包含了一个实现Flex右键菜单功能的项目。这个项目可能有以下几个关键部分: - ContextMenu类的实例化:源码中可能会有一个初始化ContextMenu的代码段,添加了菜单项和对应的事件处理函数。 - ...
"Flex右键菜单例子"是一个专门针对Flex技术的右键菜单自定义解决方案。Flex是一种用于构建富互联网应用程序(RIA)的开放源代码框架,由Adobe公司开发。它基于ActionScript编程语言和MXML标记语言,主要用于创建交互式...
标题提到的"flex自定义右键菜单 完全屏蔽"是指在Flex应用程序中,不仅实现对默认右键菜单的完全屏蔽,还允许开发者根据自己的需求创建并应用自定义的右键菜单。这种方法避免了使用JavaScript进行跨域通信来实现屏蔽...
本话题我们将探讨如何使用Flex技术来实现一个自定义的右键菜单。Flex是一种基于ActionScript 3.0的开放源码框架,主要用于构建富互联网应用程序(RIA)。 首先,我们需要理解Flex的基本架构。Flex使用MXML和...
在IT行业中,自定义Flex右键...综上所述,自定义Flex右键菜单涉及了Flex的基础组件使用、事件处理、样式定制以及资源管理等多个方面。通过熟练掌握这些知识点,开发者能够打造出更加符合用户习惯和需求的界面交互体验。
总结来说,"flex右键菜单代码"是一个关于如何在Flex应用程序中实现右键菜单的示例,涉及到创建、填充菜单项以及绑定和处理菜单事件等技术细节。通过学习这个示例,开发者可以提高自己在Flex环境下的交互设计能力,...
总结来说,这个实例展示了如何在Flex中创建自定义的右键菜单,包括隐藏内置菜单项、添加自定义菜单项、绑定事件监听器以及响应用户操作。这是一项基础但重要的技能,对于提升Flex应用的用户体验有着重要作用。通过...
在Flex开发中,有时我们需要为用户界面添加自定义的右键菜单,以便提供更多的交互功能。本教程将指导你如何在Flex项目中实现这一功能,主要涉及以下知识点: 1. **右键菜单库的引入**: 首先,你需要下载一个名为`...
在压缩包中的"RightClickDemo"文件中,包含了完整的示例代码和运行资源,可以帮助开发者更直观地理解和学习如何在Flex 3环境中实现自定义右键菜单。通过分析和运行这个Demo,你可以了解每个部分的功能,以及它们是...
本文将深入探讨两种实现Flex自定义右键菜单的方法:系统右键菜单的扩展以及完全自定义的右键菜单。 1. **系统右键菜单** 系统右键菜单是在Flex应用中利用ActionScript 3.0直接添加到UI组件上的菜单项。这种实现...
在Flex开发中,自定义右键菜单是一项常见的需求,它能提供更加个性化和功能丰富的交互体验。本篇文章将深入探讨如何在Flex应用中实现自定义的右键菜单,包括两种主要的方法:系统右键菜单的扩展和完全屏蔽系统菜单以...
本例探讨了如何创建并屏蔽原有的Flex右键菜单,同时讲解了事件监听器的注册过程。Flex是一个用于构建富互联网应用程序(RIA)的框架,基于ActionScript和MXML语言,它提供了丰富的组件库,其中包括用于创建菜单的`...
本文将深入探讨如何在Flex环境中实现自定义的右键菜单,包括屏蔽浏览器的默认右键菜单,创建XML格式的多级菜单,以及设置菜单出现位置的自适应策略。 首先,我们需要了解Flex屏蔽浏览器系统右键的基本方法。在...
自定义右键菜单在flex的实现想必有很多朋友都没有尝试过吧,下面与大家分享下如何实现,具体代码如下
标题中的“Flex4自定义右键菜单源码”意味着这个压缩包包含了实现自定义右键菜单功能的源代码。这对于初学者来说是一份宝贵的学习资源,他们可以通过阅读和理解代码来学习如何在Flex4项目中创建和管理自定义的右键...