`
xjcloudy
  • 浏览: 9373 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex自定义右键菜单的终极实现

    博客分类:
  • Flex
阅读更多

Flex的右键菜单始终都是开发者所诟病的一个功能。

为了能够屏蔽原生菜单实现真正的“自定义”。网上也流传了几个版本。其中RightClick.js版算是比较全面的。现在就分析一下RightClick的实现原理。

原理:这个其实大家都知道。通过在swf“宿主”页面中写js拦截浏览器的鼠标事件,并通过Flex与js通信的功能,通知Flex。

这里的主要的难点就是在拦截html鼠标事件的不同浏览器兼容性的问题。

首先,右键的弹出菜单有两个事件,一个是鼠标的事件,另一个是oncontextmenu事件。注册oncontextmenu事件在处理函数中return false。就可以阻止html的菜单。然后在鼠标事件中,阻止事件传播,使Flex无法接受到该事件。这里需要注意的是 IE中的事件event是全局的。Firefox中是以函数参的形式。另外在Firefox中注册鼠标事件时,一定要使用addEventlistener的方式,并且要使用捕获的方式。这样才能在事件到达swf所在的元素前“拦截”到该事件。在Firefox里很简单只要e.stopPropagation()就可以了。IE就麻烦了,因为在IE中只有冒泡没有捕获阶段,怎么办呢?通过分析RightClick中的代码,发现他在object元素上又包了一个<div>做container。然后,在这个div上注册的onmousedown,在响应事件里有一个setCapture(),经过百度才知道关键就是这个setCapture().他的作用是是目标的对象拥有捕获事件的能力,并被全文档继承,有一个boolean参,true的话 该元素下的所有子元素都不会响应事件。看明白了吧。在swf所在object上包裹一个<div>并将其setCapture那么flex就不会接受到任何事件了从而起到了屏蔽鼠标右键的作用。当然不要忘了当鼠标按键抬起时要releaseCapture()。不然你的flex就无法和鼠标交互了。

部分代码如下:

1:初始化注册监听函数

写道
if(navigator.appName=="Microsoft Internet Explorer"){
  document.onmousedown=onRightMouseDownForIE;
  document.oncontextmenu=stopContextMenu;
}else if(navigator.appName=="Netscape"){
  document.oncontextmenu=stopContextMenu;
  window.addEventListener("mousedown",onRightMouseDownForNS, true);

}

  2:函数的简单实现:

写道
function onRightMouseDownForNS(e){
  if (e.stopPropagation) e.stopPropagation();
  if(e.witch==2)
    ...........
   return false;
}

function onRightMouseDownForIE(){
  if(event.button==4)
   .........
  return false;
}
function stopContextMenu(e){

  return false;
}

 3:设置全局捕获

写道
var t=document.getElementById("${application}");
t.setCapture();

  注意这段代码的位置,要是他在swf通过swfobject加载进页面后再执行。这里我把他放在了html的最后,"${application}请不要迷惑 因为我改的是Flex项目里的index.template.html

这些就是精简的RightClick 只是为了描述清楚它的原理 在实际应用中请自行修改。

更正:如果在页面加载时就执行这端代码的话 浏览器会假死,估计是这个div拦截了所有的事件。正确做法可以把这段代码放到鼠标响应事件里。

0
3
分享到:
评论

相关推荐

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

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

    flex自定义右键菜单 完全屏蔽

    接下来,"自定义"右键菜单部分涉及到创建和添加自定义菜单项。在Flex中,我们可以使用`ContextMenuStrip`类来创建一个自定义的右键菜单。每个菜单项可以通过`MenuItem`类来表示,可以设置其文本、图标、点击事件等...

    Flex自定义右键菜单

    2. **创建自定义菜单**: - 使用`Menu`类实例化菜单对象,然后添加菜单项(`MenuItem`)。 - 示例代码: ```actionscript var rightClickMenu:Menu = new Menu(); var menuItem1:MenuItem = new MenuItem(); ...

    Flex自定义右键菜单具体实现

    自定义右键菜单在flex的实现想必有很多朋友都没有尝试过吧,下面与大家分享下如何实现,具体代码如下

    flex 自定义右键菜单

    本文将深入探讨两种实现Flex自定义右键菜单的方法:系统右键菜单的扩展以及完全自定义的右键菜单。 1. **系统右键菜单** 系统右键菜单是在Flex应用中利用ActionScript 3.0直接添加到UI组件上的菜单项。这种实现...

    flex自定义右键菜单

    解压并引入该库,可以利用其中的类和方法进一步优化自定义菜单的实现。 总结,自定义Flex的右键菜单涉及创建菜单项、绑定事件、关联组件、动态更新以及样式设置等多个方面。通过熟练掌握这些技术,开发者可以创建出...

    Flex4自定义右键菜单源码.rar

    标题中的“Flex4自定义右键菜单源码”意味着这个压缩包包含了实现自定义右键菜单功能的源代码。这对于初学者来说是一份宝贵的学习资源,他们可以通过阅读和理解代码来学习如何在Flex4项目中创建和管理自定义的右键...

    flex添加右键菜单实例

    总结来说,这个实例展示了如何在Flex中创建自定义的右键菜单,包括隐藏内置菜单项、添加自定义菜单项、绑定事件监听器以及响应用户操作。这是一项基础但重要的技能,对于提升Flex应用的用户体验有着重要作用。通过...

    FLEX 完全屏蔽系统默认右键菜单,实现自定义菜单

    完全屏蔽flex自带的右键菜单,实现自定义右键菜单,附件有完整可运行的例子。 这个问题折腾了一天多,在网上搜了很多资料,几乎都是一样的,转来转去,且讲的不明不白。这里我提供了可运行的全部代码,让你轻松搞定...

    flex实现右键菜单

    3. **自定义菜单项行为** 在上面的示例中,我们为每个菜单项添加了点击事件处理函数`handleItemClick`,在这个函数里可以编写具体的功能代码。 4. **CustomContextMenu类** 如果需要更复杂的自定义,可以创建一个...

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

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

    Flex 实现右键菜单

    本文将深入探讨如何在Flex环境中实现自定义的右键菜单,包括屏蔽浏览器的默认右键菜单,创建XML格式的多级菜单,以及设置菜单出现位置的自适应策略。 首先,我们需要了解Flex屏蔽浏览器系统右键的基本方法。在...

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

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

    Flex添加右键菜单

    这会阻止Flex默认的右键行为,并准备使用自定义菜单。通常,这会在应用程序创建完成的事件处理函数中进行,如`application1_creationCompleteHandler()`。 4. **监听右键点击事件**: 为需要添加右键菜单的组件...

    flex自制右键菜单

    3. **自定义菜单项的事件处理**: 每个`ContextMenuItem`都有自己的事件监听器,可以添加自定义的行为。例如,当用户点击"菜单项1"时,可以执行特定的函数: ```actionscript menuItem1.addEventListener...

    Flex右键菜单例子

    这可能包括一个简单的Flex项目文件(如.mxml或.as),其中包含自定义菜单的实现代码,以及可能的示例数据或配置文件。开发者可以通过查看和运行这些示例来学习如何在他们的Flex应用中实现相同的功能。 总之,"Flex...

    自定义Flex右键菜单

    通过阅读这篇博客,我们可以更深入地理解作者如何实现自定义Flex右键菜单,包括可能涉及的特殊技巧和最佳实践。 综上所述,自定义Flex右键菜单涉及了Flex的基础组件使用、事件处理、样式定制以及资源管理等多个方面...

    Flex 3完整的右键自定义菜单Demo

    本Demo "Flex 3完整的右键自定义菜单" 正是为此目的而设计,它展示了如何在Flex 3环境中创建、屏蔽默认菜单并实现自定义的右键上下文菜单。 在Flex 3中,我们主要使用mx.controls.ContextMenu类来创建自定义的右键...

    flex右键菜单代码

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

Global site tag (gtag.js) - Google Analytics